Java 网络编程 NIO 基本用法

Java NIO(New I/O)是Java提供的一种更高效的I/O处理方式,主要用于构建非阻塞的网络应用程序。NIO引入了一些新的概念和类,例如Channel、Buffer、Selector等,以及新的处理方式,提供了更好的性能和灵活性。

主要特点和优势:

  1. 非阻塞IO:NIO的通道(Channel)是非阻塞的,可以在等待数据就绪时执行其他任务,提高了系统的并发能力。
  2. 缓冲区(Buffer):NIO使用缓冲区来处理数据,可以提高数据传输的效率。
  3. 选择器(Selector):NIO提供了Selector机制,可以同时监控多个通道的IO事件,实现单线程管理多个通道的IO操作。
  4. 内存映射文件:NIO支持将文件映射到内存中进行读写操作,提高了文件IO的性能。
  5. 适用于高性能网络编程:NIO适用于需要处理大量并发连接的网络应用程序,可以更有效地利用系统资源。

NIO核心组件:

  1. Channel:通道是NIO中用于进行数据传输的实体,可以与文件、套接字等进行交互。
  2. Buffer:缓冲区用于存储数据,读写数据时需要通过缓冲区来传输。
  3. Selector:选择器是NIO的核心组件,用于监控多个通道的IO事件,实现高效的IO多路复用。
  4. Pipe:管道是两个线程之间的单向数据连接,可用于线程间通信。

示例代码:

以下是一个简单的Java NIO服务端和客户端的示例代码,实现了基本的服务端和客户端通信:

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;

public class NIOServer {
    public static void main(String[] args) throws IOException {
        ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
        serverSocketChannel.socket().bind(new InetSocketAddress(12345));
        serverSocketChannel.configureBlocking(false); // 设置为非阻塞模式

        while (true) {
            SocketChannel socketChannel = serverSocketChannel.accept();

            if (socketChannel != null) {
                ByteBuffer buffer = ByteBuffer.allocate(1024);
                int bytesRead = socketChannel.read(buffer);

                while (bytesRead != -1) {
                    buffer.flip(); // 切换读模式
                    while (buffer.hasRemaining()) {
                        System.out.print((char) buffer.get());
                    }
                    buffer.clear(); // 清空缓冲区
                    bytesRead = socketChannel.read(buffer);
                }
                socketChannel.close();
            }
        }
    }
}

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;

public class NIOClient {
    public static void main(String[] args) throws IOException {
        SocketChannel socketChannel = SocketChannel.open(new InetSocketAddress("localhost", 12345));

        String message = "Hello Server!";
        ByteBuffer buffer = ByteBuffer.wrap(message.getBytes());
        socketChannel.write(buffer);

        socketChannel.close();
    }
}

以上是Java NIO的简要介绍和示例代码,希望能帮助你理解Java NIO的基本概念和用法。在实际开发中,可以根据具体需求和场景灵活运用NIO来构建高性能的网络应用程序。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朱大侠888

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值