Java 处理海量数据时如何使用BufferedReader
我试图读取大量的数据(消息),这些数据(消息)来自我没有拥有的服务器。我正在使用BufferedReader对象和函数readLine(),因为我得到的消息包含换行符(\n)Java 处理海量数据时如何使用BufferedReader,java,sockets,bufferedreader,Java,Sockets,Bufferedreader,我试图读取大量的数据(消息),这些数据(消息)来自我没有拥有的服务器。我正在使用BufferedReader对象和函数readLine(),因为我得到的消息包含换行符(\n) 我有一个线程可以读取消息并将其保存到消息框中 我有第二个线程轮询消息框中的消息(我有 线程同步) 这是第一个线程代码的一部分: while(!isInterrupted()) { if((line = input_reader.readLine())
while(!isInterrupted())
{
if((line = input_reader.readLine()) != null)
{
Util.offer_message(message_box, line);
}
}
一位支持程序员(他在拥有服务器的公司工作)告诉我,使用readLine()从套接字读取消息会使我经常丢失数据
无论如何,我不能真正验证我是否丢失了数据(因为我没有拥有服务器)
因此,我的问题是:
BufferedReader.readLine()
,那他就是疯了。或者,我们可以说,是误传的。或者你误解了他
如果他这样做了,那我该怎么处理呢?我应该使用read(char cbuf[],int off,int len)这样的函数然后拆分消息吗
否。readLine()
没有问题。这正是它所做的,但是如果没有bug,您将首先构建到您的系统中
但我看不出你的两条线索有什么意义。我会失去其中一个,还有队列,当你需要的时候直接读一行
注意,您正在忽略流的末尾。如果
readLine()
返回null,则应退出循环并关闭套接字 与此无关,但是否太宽了?别说了。这是一个非常具体的问题。应用程序几天前丢失了一条消息,所以这就是我和他交谈的原因(这以前从未发生过)。这可能是一种误解。此外,我想了解一些事情。如果我丢失了一个线程,然后我只是在读取消息并立即“处理”它们,这不会使缓冲区溢出吗?因为我不是一直在读新消息并清空缓冲区,而是在用CPU时间处理消息,然后才读另一条。。无论如何,最后一个答案的Thx和NBH缓冲区将溢出?如果你读得不够快,发送者就会停下来。这比您当前的代码更可取,因为您的内部队列将填满内存,并可能使读取线程崩溃。