2012-06-15 40 views
3

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

任何人都可以确认一个BufferedInputStream是否可以更好地工作?我读过它会一次检索大量数据,而不是逐字节,因此OS调用更少。

谢谢!

回答

1

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

可能最好的做法是不断地保持在InputStream之上(只要有东西需要读取就读取它)并在稍后或在另一个(较低优先级)线程中执行任何其他处理。

1

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

相关问题