我正在寻找一种有效的解决方案来接收和处理来自到服务器的套接字连接的异步消息(大小不同)。这是一个很好的带宽量(可能是250 kB/s的稳定状态,并且可以有高达1 MB/s的短突发)。目前我正在使用DataInputStream,但在繁忙的时候我会断开连接(如果队列积压变得太大,服务器会断开与客户端的连接)。
有没有人能确认一下,BufferedInputStream是否可以工作得更好?我读到它将一次检索数据块,而不是逐个字节,因此操作系统调用更少。
谢谢!
发布于 2012-06-16 03:58:05
它确实可以一次检索块,而且它可以减少操作系统调用,但如果您调用read的速度不足以处理积压,这将没有任何帮助。它不会读取下一个块,直到您完全读完它预取的块。
也许最好的做法是始终保持在InputStream之上(只要它有需要读取的内容就读取它),然后在以后或在另一个(优先级较低的)线程中进行任何其他处理。
发布于 2012-06-16 04:00:16
我不是专家,但我知道BufferedInputStream实际上会一次读取一个块,因为它将使用一个X字节大小的缓冲区。它本质上是通过套接字读取数据的抽象,而不是像您所说的那样让它使用系统调用。这可能有助于解决断开连接的问题。如果我重复了你的一些观点,很抱歉。基本上,我建议使用缓冲流。它更受控制,几次谷歌搜索会让你有更好的洞察力。
https://stackoverflow.com/questions/11057321
复制相似问题