3

我正在寻找一种有效的解决方案来接收和处理从套接字连接到服务器的异步消息(大小不一)。这是一个很好的带宽量(可能是 250 kB/s 的稳定状态,并且可以有高达 1 MB/s 的短脉冲)。目前我正在使用 DataInputStream,但在忙碌的时候我会断开连接(如果队列积压变得太大,服务器会断开客户端的连接)。

谁能确认 BufferedInputStream 是否可以更好地工作?我读过它会一次检索大块数据,而不是逐字节检索,因此操作系统调用更少。

谢谢!

4

2 回答 2

2

它确实一次检索块,并且它可能有更少的操作系统调用,但如果你调用 read 的速度不够快以服务积压,这将无济于事。在您完全读取它预取的块之前,它不会读取下一个块。

最好的办法可能是始终保持在 InputStream 的顶部(只要有要读取的内容就读取它)并稍后或在另一个(较低优先级)线程中进行任何其他处理。

于 2012-06-15T19:58:04.547 回答
1

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

于 2012-06-15T20:00:16.213 回答