简体   繁体   中英

method readLine() from the type DataInputStream is deprecated

I have this Java code for Chat-Client in which the DataInputStream is,is defined like this:

private static DataInputStream is=null;

And I keep getting error on this part:

public void run() {
/*
 * Keep on reading from the socket of the server    
 */
 String responseLine; //used to implement reading from the socket
 try{
     while((responseLine=is.readLine())!=null){ //when we recieve messages we print out here
         System.out.println(responseLine); // "is" is the object of data input stream
     }
     closed=true;
 }catch(IOException e){
     System.out.println("IOException: "+e);
 }


}

everytime I try to fix it using the information on the javadoc :

Deprecated. This method does not properly convert bytes to characters. As of JDK 1.1, the preferred way to read lines of text is via the BufferedReader.readLine() method. Programs that use the DataInputStream class to read lines can be converted to use the BufferedReader class by replacing code of the form:

DataInputStream d = new DataInputStream(in);

with:

BufferedReader d = new BufferedReader(new InputStreamReader(in));

I get another error in the code on this line:

 is=new DataInputStream(clientSocket.getInputStream());

How can I fix this?I would appreciate any help I can get on this matter

the Class Client code:

public class Clientt implements Runnable {//first we implement chat client

//the client socket        //sience we have multiple clients we are implementing threading in our application 
private static Socket clientSocket=null;
//the output stream
private static PrintStream os=null; //initializing the input & output streams
//the input stream
private static DataInputStream is=null;

private static BufferedReader inputLine=null;
private static boolean closed=false;
public static void main(String[]args)
{
    //the default port
    int portNumber=5000;
    //the default host
    String host="localhost";

    if(args.length<2)
    {
        System.out.println("Usage:Java Client <host> <portNumber>\n"
                +"now using host="+host+",portNumber="+portNumber);
    }
    else
    {
        host=args[0];
        portNumber=Integer.valueOf(args[1]).intValue();
    }

    /* 
     * Open a socket on a given host and port.
     * Open input and Output streams
     */

    try{
        clientSocket=new Socket(host,portNumber); //initializing clientsocket with mentioned host and port num
        inputLine=new BufferedReader(new InputStreamReader(System.in));//read input from the user using inputLine
        os=new PrintStream(clientSocket.getOutputStream());//outputstream is used to write to socket
        is=new DataInputStream(clientSocket.getInputStream());// inputstream is uset to read from socket
    }catch(UnknownHostException e){
        System.err.println("Don't know about host"+host);
    }catch(IOException e) {
        System.err.println("Couldn't get I/O for connection to the host"+host);
      }
    /*
     * If everything has been initialized then we want to write some date 
     * to the socket we have opened a connection to on the port portNumber
     */

    if(clientSocket!=null && os!=null && is!=null)
    {
        try{
            //Creat a thread to read from the server
            new Thread(new Clientt()).start(); //here we implement threading
            while(!closed)
            {
                os.println(inputLine.readLine());//loop continues infinetely untill we terminate application and writes to socket using output stream object
            }
            /*
             * Close the output stream,close the input stream,close the socket
             */
            os.close();
            is.close();
            clientSocket.close();
        }catch(IOException e)
        {
            System.out.println("IOException: "+e);

        }
    }

}

/*
 * Creat thread to read from the server
 * 
 */

//@Override

public void run() {
/*
 * Keep on reading from the socket of the server    
 */
 String responseLine; //used to implement reading from the socket
 try{
     while((responseLine=is.readLine())!=null){ //when we recieve messages we print out here
         System.out.println(responseLine); // "is" is the object of data input stream
     }
     closed=true;
 }catch(IOException e){
     System.out.println("IOException: "+e);
 }


}

}

You seem to have difficulties correctly applying the BufferedReader instead of the DataInputStream . You need to glue the BufferedReader and the original input stream together using an InputStreamReader .

Try the following changes:

First the variable definition:

//private static DataInputStream is=null;
private static BufferedReader br=null;

Then the instantiation:

//is=new DataInputStream(clientSocket.getInputStream());//...
br=new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

And finally wherever you have is you basically change to br (because the other used methods like close() and readLine() exist in both DataInputStream and BufferedReader ).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM