我应该使用java吗。io或java。我的网络客户端实现的nio?
所以我正在创建一个游戏,非常基本的多人游戏。我已经使用异步非阻塞I/O(rawjava.nio
)关闭了服务器端,但现在我需要设计客户端
我不知道该怎么做。我的直觉告诉我,为客户机使用NIO是过分的(它不会处理多个连接,对吧?)但我需要第二种意见
所以问题是,对于单连接客户端,使用java.io
或java.nio
是最好的选择吗
而且,如果最好的选择是标准I/O,那么使用ByteBuffer
仍然是一种好的做法吗?或者只是普通的字节数组
# 1 楼答案
简单的流I/O更容易处理,但不一定慢。我认为,它在内部使用NIO进行网络访问。(当然,如果您可以简单地重用服务器的代码,那么使用它可能是一种选择。)
由于OutputStream不支持编写ByteBuffer,因此在这里使用它没有意义
(免责声明:这只是我的观点(以及尝试将基于流IO的网络包移植到NIO的经验)。我不确定这里的最佳实践是什么。)
# 2 楼答案
性能可能会有所不同,但它取决于平台,很可能无关紧要。例如,我所做的测试表明,NIO和标准I/O在Linux和Windows上的性能不同。当发送大量数据时,NIO在Linux平台上的性能更好,但在Windows上则相反。注意:我已将套接字配置为在NIO上阻塞。在编写客户端应用程序时,几乎没有理由使用非阻塞I/O和轮询
我不会担心性能。从这个意义上说,很难说哪个更好。随大流。如果您希望使用标准I/O,但仍然希望使用ByteBuffers,那么可以分别使用newChannel(InputStream)和newChannel(OutputStream)包装套接字的
InputStream
和OutputStream
。但是,额外的同步和其他检查会带来开销。我的建议是使用java.nio
和阻塞I/O(configureBlocking(true)
)