我正在尝试读取从我不拥有的服务器获取的大量数据(消息)。我正在使用 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) 这样的函数然后分割消息吗?
如果需要了解我的问题,我可以提供更多详细信息。
感谢您的帮助。
最佳答案
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/