从套接字同步读取时如何处理缓冲区大小的边界条件?

时间:2016-04-30 04:58:17

标签: java android

如果您从read()(具有无限读取超时)检索到的InputStream上调用Socket,则传递N字节的缓冲区并返回{{1} },你如何区分这两种情况:

  1. 到目前为止,套接字接收到了N个字节,并且您的缓冲区恰好具有相同的大小
    • 再次致电N将阻止
    • 您不希望如此,因为到目前为止,在收到新数据之前您将无法处理收到的数据
  2. 到目前为止,套接字收到的字节数超过read()且缓冲区太小
    • 再次呼叫N不应阻止并仅返回额外数据
    • 这就是你想要的,因为你将拥有所有收到的数据并可以处理它
  3. 我能想到的第一个解决方案是确保read()大于内部N接收缓冲区,但我不知道该值应该是什么,而且这看起来非常脆弱。

    另一种可能性是暂时将套接字的读取超时更改为第二次Socket调用的非常短的一次(如几毫秒),这样如果我们遇到1),它就不会't 真的阻止。这听起来像是一个黑客。

0 个答案:

没有答案