为什么Socket使用流,但NIO SocketChannel使用读/写?
问题描述:
我正在尝试编写一个非阻塞客户端/服务器,我注意到Socket提供了getInputStream()
和getOutputStream()
,但SocketChannel提供了read()
和write()
。为什么Socket使用流,但NIO SocketChannel使用读/写?
下面的问题都是相关的,是为了更好地了解情况:
- 为什么这些对象如何提供分组数据有什么不同?
- 这是否是阻塞vs非阻塞的副作用还是简单的 的实施?
- 这是我在决定如何从套接字读取时需要考虑的事情吗?
- 我可以收到一个不完整的数据包,其缓冲区在任一实施中的结束时间早于预期吗?
答
为什么这些对象在提供分组数据的方式上有所不同?
因为否则它们将是相同的。 NIO的设计者认为他们必须将数据,位置,容量和限制封装到一个类中。
这是阻塞VS非阻塞的副作用还是简单的不同实现?
不,是的。
这是我在决定如何从套接字读取时需要考虑的事情吗?
当然。
我可以收到一个不完整的数据包,其中缓冲区结束时间比预期的要早吗?
是的。这是TCP/IP的属性,而不是Java的属性。
有没有这样的事情'NIO套接字'。 – EJP