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

时间:2017-05-09 22:13:57

标签: java sockets bufferedreader

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

  1. 我有一个线程可以读取消息并将其保存到消息框中。
  2. 我有第二个帖子,它会从消息框中查询消息(我有 线程同步)
  3. 这是第一个帖子代码的一部分:

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

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

    无论如何,我无法确认我是否丢失了数据(因为我没有拥有服务器)。

    所以我的问题是:

    1. 程序员是否因为大量数据而定期丢失数据?
    2. 如果他这样做,那我该怎么处理呢?我应该使用像read(char cbuf [],int off,int len)这样的函数然后拆分消息吗?
    3. 如果需要了解我的问题,我可以提供更多细节。

      帮助你。

1 个答案:

答案 0 :(得分:1)

  

程序员是否因为大量数据而定期丢失数据?

首先, 应用程序丢失数据?如果是这样,那么在这段代码中肯定不会发生。如果他告诉你不要在这个借口上使用BufferedReader.readLine()他就疯了。或者,我们应该说,误导了。或许你误会了他。

  

如果他这样做,那我该怎么处理呢?我应该使用像read(char cbuf [],int off,int len)这样的函数然后拆分消息吗?

没有。 readLine()没有错。这正是它的作用,但没有你最初会建立的错误。

但我不明白你的两个主题。我会丢失其中一个和队列,只是在你想要的时候直接读取它们。

NB你忽略了流的结束。如果readLine()返回null,则应退出循环并关闭套接字。