Java 如何正确使用带套接字的BufferedReader

Java 如何正确使用带套接字的BufferedReader,java,android,sockets,chat,bufferedreader,Java,Android,Sockets,Chat,Bufferedreader,该应用程序是一个基本的聊天客户端。 我有一个从服务器获取数据的线程 我想分别从服务器获取每个响应。 只有当我使用应用程序的其他部分发送exit时循环中断时,它才会在控制台中打印。 因此,当System.out.println响应时,它会立即打印整个缓冲区 我如何使它工作并分别打印每个响应 谢谢大家! 编辑 服务器响应应在每行后面包含\n 这对我来说很有用 没有\n,它只是等待循环中断 有没有更好的方法来避免此问题 class ServerThread implements Runnabl

该应用程序是一个基本的聊天客户端。 我有一个从服务器获取数据的线程

我想分别从服务器获取每个响应。 只有当我使用应用程序的其他部分发送exit时循环中断时,它才会在控制台中打印。 因此,当System.out.println响应时,它会立即打印整个缓冲区

我如何使它工作并分别打印每个响应

谢谢大家!

编辑

服务器响应应在每行后面包含\n

这对我来说很有用

没有\n,它只是等待循环中断

有没有更好的方法来避免此问题

    class ServerThread implements Runnable {
    @Override
    public void run(){
        BufferedReader in = null;
        Socket socket;
        try
        {
            if (Thread.currentThread().isAlive()) {
                sendString("exit");
                Thread.currentThread().interrupt();}

            InetAddress serverAddress = InetAddress.getByName(SERVER_IP);
            socket = new Socket(serverAddress, SERVER_PORT);
            outr = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            String serverResponse;
            while((serverResponse = in.readLine()) != null)
            {
                System.out.println(serverResponse);
            }

            in.close();
            outr.close();
            socket.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

您正在使用一个BufferedReader并使用in.readLine读取它,这将返回响应中的下一行。行是以换行符结尾的字符串,因此BufferedReader必须等到看到换行符后才能返回行。如果您不想在响应中使用换行符,请不要使用readLine,而是使用其他读取方法。

在服务器代码中使用close-in-finally Block,您可能不会在每个响应的末尾添加一个行分隔符,所有响应加起来都是一行。@Titus服务器会在每个消息之后响应,当我用python服务器检查它时,它工作正常。谢谢,我不知道我以前怎么没有想到换行符。