java - 处理海量数据时如何使用BufferedReader

标签 java sockets bufferedreader

我正在尝试读取从我不拥有的服务器获取的大量数据(消息)。我正在使用 BufferedReader 对象和 readLine() 函数,因为我收到的消息包含换行符 (\n)。

  1. 我有一个线程读取消息并将其保存到消息框中。
  2. 我有第二个线程,它从消息框中轮询消息(我有 线程同步)

这是第一个线程的代码的一部分:

      while(!isInterrupted())
      {                 
        if((line = input_reader.readLine()) != null)
        {
           Util.offer_message(message_box, line);
        }
      }

一位支持程序员(他在拥有服务器的公司工作)告诉我,使用 readLine() 从套接字读取消息会让我经常丢失数据。

无论如何,我无法真正验证我是否丢失数据(因为我不拥有服务器)。

所以我的问题是:

  1. 程序员关于由于海量数据而定期丢失数据的说法正确吗?
  2. 如果他这样做了,我该如何处理?我应该使用像 read(char cbuf[], int off, int len) 这样的函数然后分割消息吗?

如果需要了解我的问题,我可以提供更多详细信息。

感谢您的帮助。

最佳答案

Is the programmer right about losing data on regularly because of the massive amount of data?

首先,应用程序是否丢失数据?如果是这样,那么在这段代码中肯定不会发生这种情况。如果他以此为借口告诉你不要使用 BufferedReader.readLine() ,他就疯了。或者,我们可以说,被误导了。或者你可能误解了他。

If he does, then how should i handle it ? should i use a function like read(char cbuf[], int off, int len) and then spliting the messages?

没有。 readLine() 没有任何问题。这正是它的作用,但没有您首先会在自己的程序中构建的错误。

但我不明白你的两个线程的意义。我会丢失其中之一和队列,然后在需要时直接读取行。

注意,您忽略了流结束。如果 readLine() 返回 null,您应该退出循环并关闭套接字。

关于java - 处理海量数据时如何使用BufferedReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43880687/

相关文章:

python - 从循环 DNS 记录中获取单个主机名

java - 如何返回 Bufferedreader 的开头?

java - 从(大)文本文件填充 JComboBox

java - Spring Boot 应用程序与部署在 Tomcat/Jetty 上的 .war 文件

Java:最终字段树形图更改大小

java - 尝试使用原始套接字发送 GET 请求时收到 301

java - 如何加快java.net.ServerSocket和java.net.Socket效率?

java - 当 ClassLoader.getSystemRessource(filename) 给出结果时,为什么会收到 FileNotFoundException?

java - 编辑 java jdk 的替代项时权限被拒绝

java - Android 中的向后兼容性和 SDK 更新