我正在寻找一种有效的解决方案来接收和处理从套接字连接到服务器的异步消息(大小不一)。它带来了大量带宽(可能是250 kB / s稳态,并且可以有短突发,最高可达1 MB / s)。目前我正在使用DataInputStream,但在繁忙时刻我会断开连接(如果队列积压过大,服务器将断开客户端连接)。
任何人都可以确认BufferedInputStream是否可以更好地工作?我已经读过,它将一次检索数据块,而不是逐字节检索,因此操作系统调用次数较少。
谢谢!
答案 0 :(得分:1)
它确实一次检索块,并且可以减少操作系统调用,但如果您没有足够快地调用read来为backlog提供服务,这将无济于事。在您完全读取预取的块之前,它不会读取下一个块。
可能最好的办法是不断地保持在InputStream之上(只要有东西可以读取它),并在以后或在另一个(低优先级)线程中进行任何其他处理。
答案 1 :(得分:1)
我不是专家,但我确实知道BufferedInputStream实际上会一次读取一个块,因为它将使用一个X字节大的缓冲区。它本质上是一个通过套接字读取数据的抽象,而不是像你说的那样使用系统调用。它可能有助于解决断开连接问题。对不起,如果我重申你的一些观点。基本上,我建议使用缓冲流。它更受控制,一些谷歌搜索会给你一个更好的洞察力。