Java NIO (Non-blocking I/O) with Server-Client Example – java.nio.ByteBuffer 和 channels.Selector – Java NIO Vs. IO

已发表: 2021-08-06
带有服务器-客户端示例的 Java NIO(非阻塞 I:O) - CrunchifyNIOServer.java

Java NIO是我最喜欢的话题。 自过去 2 年以来,我一直在与 NIO 合作,我想为我的读者分享简单Server-Client code ,他们可以在他们的生产环境中免费使用这些代码。

从 JDK 1.4 开始,创建 NIO 是为了允许所有 Java 程序员实现非常高速的输入/输出,而无需处理自定义的本机代码。 NIO 使用java.nio.buffer库与简单的 I/O 相比,后者在任何操作系统内部耗尽和填充缓冲区。

在本教程中,我们将java.nio.channelsjava.nio.channels.Selector库。

  • channels表示与能够执行 I/O 操作的实体的连接,例如文件和套接字; 定义 selectors ,用于多路复用的非阻塞 I/O 操作。
  • 可以通过调用该类的open method来创建selector ,该方法将使用系统默认的选择器提供程序来创建一个新的选择器。
带有 API 详细信息的 java.nio 包说明

如果您有below questions ,那么您来对地方了:

  • 如何开始使用 Java NIO
  • 什么是Java NIO和Java NIO教程
  • 异步 Java NIO
  • java nio包的具体用途是什么
  • Java NIO 教程
  • 如何使用 Java NIO 实现高性能 I/O

让我们开始吧:

第1步

  • 创建CrunchifyNIOServer.javaport 1111上打开连接
  • 使用isAcceptable()检查通道是否准备好接受新的套接字连接
    • 如果是 - 连接它
  • 使用isReadable()检查通道是否准备好读取
    • 如果是 - 从缓冲区读取并在 Eclipse 控制台上打印
  • 一旦你得到最后的公司名称“crunchify”
    • 紧密连接

第2步

  • 创建CrunchifyNIOClient.java尝试连接到port 1111上的服务器
  • 使用 5 个公司名称创建 ArrayList
  • 遍历 ArrayList 并将每个 companyName 发送到服务器
  • 任务完成后关闭连接

看看这个Java代码:

服务器代码——CrunchifyNIOServer.java


客户端代码——CrunchifyNIOClient.java

带有服务器-客户端示例的 Java NIO(非阻塞 I:O) - CrunchifyNIOClient.java

服务器端的结果:

客户端结果:


几个常见问题解答:

  1. 从客户端,我如何维护持久连接?
    • 你可以使用socket.setKeepAlive(true); 从客户端建立连接。
  2. 如何阅读对发送到服务器的消息的响应。 服务器每 10 秒不断生成消息。 我只需要阅读对我的请求的回复。 据我了解,TCP“流”数据而不是记录结束等。
    • 对于客户端服务器通信,需要明确定义协议。 readLine()调用将被阻塞,直到所有数据都返回,所以不要使用它。 Try reading bytes from the stream until -1 is returned.

让我知道这是否有效。