Java DataInputStream与BufferedInputStream的区别

3
我正在寻找一种高效的解决方案,以接收和处理来自服务器套接字连接的异步消息(大小各异)。这里将有相当大量的数据带宽(可能稳定在250 kB/s左右,并且会短暂地突发到1 MB/s)。目前我正在使用DataInputStream,但在繁忙时刻我会被断开连接(如果队列积压太多,服务器将断开客户端的连接)。

是否有人可以确认使用BufferedInputStream可能会更好?我读过它会一次检索多个数据块,而不是按字节,因此操作系统调用更少。

谢谢!

2个回答

2

它会一次检索多个块,并且可能会减少操作系统调用,但是如果您没有快速调用read以服务于积压,则这并不会有所帮助。它不会读取下一个块,直到您完全读取了预取的块。

最好的方法可能是始终关注InputStream(每当它有东西要读取时就读取它),然后稍后或在另一个(较低优先级)线程中进行任何其他处理。


1

我不是专家,但我知道BufferedInputStream实际上会一次读取一块数据,因为它会使用一个X字节大小的缓冲区。它本质上是用于从套接字读取数据的抽象,而不是像你说的那样使用系统调用。它可能有助于解决断开连接的问题。如果我重申了你的某些观点,对不起。基本上,我建议使用Buffered stream。它更受控制,几个谷歌搜索可以让你更好地了解。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接