我应该使用java.io或java.nio来实现我的网络客户端吗?

时间:2011-06-19 19:20:51

标签: java io client nio

所以我正在制作一款非常基本的多人游戏。我使用异步非阻塞I / O(原始java.nio)将服务器端关闭,但现在我需要设计客户端。

我不确定应该怎么做。我的直觉告诉我使用NIO作为客户端是过度的(它不会像它会处理多个连接,对吗?)但我想要第二个意见。

所以问题是,对于单连接客户端,是使用java.iojava.nio的最佳选择吗?

而且,如果最佳选择是标准I / O,那么使用ByteBuffer s仍然是一种好习惯吗?或者只是通常的字节数组?

2 个答案:

答案 0 :(得分:2)

性能可能会有所不同,但它取决于平台,而且很可能无关紧要。例如,我所做的测试表明,NIO和标准I / O在Linux和Windows上的表现不同。在发送大量数据时,NIO在Linux平台上表现更好,但在Windows上则相反。注意:我已将套接字配置为在NIO上阻塞。编写客户端应用程序时,几乎没有理由使用非阻塞I / O和轮询。

我不担心性能。从这个意义上讲很难说哪个更好。选择你喜欢的东西。如果您想使用标准I / O,但仍想使用ByteBuffers,那么您可以使用newChannel(InputStream)和{{3}包装Socket的InputStreamOutputStream }, 分别。但是,额外的同步和其他检查会产生开销。我的建议是使用java.nio并使用阻止I / O(configureBlocking(true))。

答案 1 :(得分:0)

简单流I / O更容易处理,并不一定更慢。我认为它内部使用NIO,用于网络访问。 (当然,如果您可以简单地重用服务器的代码,那么使用它可能是一种选择。)

由于OutputStream不支持编写ByteBuffer,因此在此处使用它是没有意义的。

(免责声明:这只是我的观点(以及尝试将我的基于流IO的网络包移植到NIO的经验)。我不确定最佳实践。)