【问题标题】:How can I print every line available from one BufferedReader before checking another BufferedReader?在检查另一个 BufferedReader 之前,如何打印一个 BufferedReader 中可用的每一行?
【发布时间】:2014-03-29 17:50:13
【问题描述】:
        PrintWriter out = new PrintWriter(DoDSocket.getOutputStream(), true);

        BufferedReader in = new BufferedReader(new InputStreamReader(DoDSocket.getInputStream()));

        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));

        String fromServer;
        String fromUser;

        while ((fromServer = in.readLine()) != null)
        {

            System.out.println(fromServer);

            if ((fromUser= stdIn.readLine()) != null)
            {
                //System.out.println(fromUser);
                out.println(fromUser);
            }
        }

在此客户端代码中,我创建了一个打印写入器和一个与服务器通信的缓冲读取器,我还有一个单独的读取器,它从命令行读取 System.in。

我目前的问题是,如果服务器向客户端发送多行字符串,我将不得不按 Enter 接收每一行。如何编辑此代码,以便在检查用户键入的内容之前从服务器的缓冲读取器打印每一行,而不是在每一行之后检查?

【问题讨论】:

  • 您需要将循环检查来自服务器的消息与检查用户输入的if 语句分开。
  • 您能说得更具体些吗?如果我取出 if 语句,第一个循环永远不会结束。
  • 不,它不会,它会在in.readLine()==null时结束
  • 当我运行它时,它永远不会退出第一个循环,因为它没有从客户端发送任何内容。

标签: java bufferedreader


【解决方案1】:

为什么不一个接一个地循环呢?:

PrintWriter out = new PrintWriter(DoDSocket.getOutputStream(), true);

BufferedReader in = new BufferedReader(new InputStreamReader(DoDSocket.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));

String fromServer;
String fromUser;

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

while ((fromUser = stdIn.readLine()) != null)
{
    System.out.println(fromUser);
}

【讨论】:

  • 这会打印来自服务器的所有内容,但不会退出第一个循环。
  • 您希望何时退出第一个循环 - 在什么条件下?还是您想通过用户输入来控制它,但在打印之前只需要更多输入?
  • 您可以在特定缓冲区大小、特定行数或流中存在特定内容时从服务器打印行。或者,我猜,即使经过了一段时间。
  • 基本上,我希望代码轮流检查来自服务器阅读器和用户阅读器的内容。但有时服务器阅读器会发送多行,我希望在再次检查用户阅读器之前将其全部打印出来。
  • 那么 ALL 是什么意思?想象一下有人在您的邮箱中向您发送邮件。他们可能会给您发送不止一封信,也可能不会。您只想在他们完成每个批次后回复 - 您怎么知道他们何时完成?您需要一些指示 - 可能发送“特殊消息”、保留指示批次结束的特殊字符或命令等。
猜你喜欢
  • 2012-03-01
  • 2018-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 2012-05-02
相关资源
最近更新 更多