Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理海量数据时如何使用BufferedReader_Java_Sockets_Bufferedreader - Fatal编程技术网

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

Java 处理海量数据时如何使用BufferedReader,java,sockets,bufferedreader,Java,Sockets,Bufferedreader,我试图读取大量的数据(消息),这些数据(消息)来自我没有拥有的服务器。我正在使用BufferedReader对象和函数readLine(),因为我得到的消息包含换行符(\n) 我有一个线程可以读取消息并将其保存到消息框中 我有第二个线程轮询消息框中的消息(我有 线程同步) 这是第一个线程代码的一部分: while(!isInterrupted()) { if((line = input_reader.readLine())

我试图读取大量的数据(消息),这些数据(消息)来自我没有拥有的服务器。我正在使用BufferedReader对象和函数readLine(),因为我得到的消息包含换行符(\n)

  • 我有一个线程可以读取消息并将其保存到消息框中
  • 我有第二个线程轮询消息框中的消息(我有 线程同步)
  • 这是第一个线程代码的一部分:

          while(!isInterrupted())
          {                 
            if((line = input_reader.readLine()) != null)
            {
               Util.offer_message(message_box, line);
            }
          }
    
    一位支持程序员(他在拥有服务器的公司工作)告诉我,使用readLine()从套接字读取消息会使我经常丢失数据

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

    因此,我的问题是:

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

    谢谢你的帮助

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

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

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

    否。
    readLine()
    没有问题。这正是它所做的,但是如果没有bug,您将首先构建到您的系统中

    但我看不出你的两条线索有什么意义。我会失去其中一个,还有队列,当你需要的时候直接读一行


    注意,您正在忽略流的末尾。如果
    readLine()
    返回null,则应退出循环并关闭套接字

    与此无关,但是否太宽了?别说了。这是一个非常具体的问题。应用程序几天前丢失了一条消息,所以这就是我和他交谈的原因(这以前从未发生过)。这可能是一种误解。此外,我想了解一些事情。如果我丢失了一个线程,然后我只是在读取消息并立即“处理”它们,这不会使缓冲区溢出吗?因为我不是一直在读新消息并清空缓冲区,而是在用CPU时间处理消息,然后才读另一条。。无论如何,最后一个答案的Thx和NBH缓冲区将溢出?如果你读得不够快,发送者就会停下来。这比您当前的代码更可取,因为您的内部队列将填满内存,并可能使读取线程崩溃。