千家信息网

Java NIO代码怎么写

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要讲解了"Java NIO代码怎么写",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java NIO代码怎么写"吧!Java代码:import
千家信息网最后更新 2025年11月07日Java NIO代码怎么写

这篇文章主要讲解了"Java NIO代码怎么写",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java NIO代码怎么写"吧!

Java代码:

import java.io.IOException;  import java.net.InetSocketAddress;  import java.net.ServerSocket;  import java.nio.ByteBuffer;  import java.nio.channels.SelectionKey;  import java.nio.channels.Selector;  import java.nio.channels.ServerSocketChannel;  import java.nio.channels.SocketChannel;  import java.util.Iterator;  import java.util.Set;   public class NIOServer {            /*标识数字*/     private  int flag = 0;      /*缓冲区大小*/     private  int BLOCK = 4096;      /*接受数据缓冲区*/     private  ByteBuffer sendbuffer = ByteBuffer.allocate(BLOCK);      /*发送数据缓冲区*/     private  ByteBuffer receivebuffer = ByteBuffer.allocate(BLOCK);      private  Selector selector;       public NIOServer(int port) throws IOException {          // 打开服务器套接字通道          ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();          // 服务器配置为非阻塞          serverSocketChannel.configureBlocking(false);          // 检索与此通道关联的服务器套接字          ServerSocket serverSocket = serverSocketChannel.socket();          // 进行服务的绑定          serverSocket.bind(new InetSocketAddress(port));          // 通过open()方法找到Selector          selector = Selector.open();          // 注册到selector,等待连接          serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);          System.out.println("Server Start----8888:");      }        // 监听      private void listen() throws IOException {          while (true) {              // 选择一组键,并且相应的通道已经打开              selector.select();              // 返回此选择器的已选择键集。              Set selectionKeys = selector.selectedKeys();              Iterator iterator = selectionKeys.iterator();              while (iterator.hasNext()) {                          SelectionKey selectionKey = iterator.next();                  iterator.remove();                  handleKey(selectionKey);              }          }      }       // 处理请求      private void handleKey(SelectionKey selectionKey) throws IOException {          // 接受请求          ServerSocketChannel server = null;          SocketChannel client = null;          String receiveText;          String sendText;          int count=0;          // 测试此键的通道是否已准备好接受新的套接字连接。          if (selectionKey.isAcceptable()) {              // 返回为之创建此键的通道。              server = (ServerSocketChannel) selectionKey.channel();              // 接受到此通道套接字的连接。              // 此方法返回的套接字通道(如果有)将处于阻塞模式。              client = server.accept();              // 配置为非阻塞              client.configureBlocking(false);              // 注册到selector,等待连接              client.register(selector, SelectionKey.OP_READ);          } else if (selectionKey.isReadable()) {              // 返回为之创建此键的通道。              client = (SocketChannel) selectionKey.channel();              //将缓冲区清空以备下次读取              receivebuffer.clear();              //读取服务器发送来的数据到缓冲区中              count = client.read(receivebuffer);               if (count > 0) {                  receiveText = new String( receivebuffer.array(),0,count);                  System.out.println("服务器端接受客户端数据--:"+receiveText);                  client.register(selector, SelectionKey.OP_WRITE);              }          } else if (selectionKey.isWritable()) {              //将缓冲区清空以备下次写入              sendbuffer.clear();              // 返回为之创建此键的通道。              client = (SocketChannel) selectionKey.channel();              sendText="message from server--" + flag++;              //向缓冲区中输入数据              sendbuffer.put(sendText.getBytes());               //将缓冲区各标志复位,因为向里面put了数据标志被改变要想从中读取数据发向服务器,就要复位              sendbuffer.flip();              //输出到通道              client.write(sendbuffer);              System.out.println("服务器端向客户端发送数据--:"+sendText);              client.register(selector, SelectionKey.OP_READ);          }      }       /**       * @param args       * @throws IOException       */     public static void main(String[] args) throws IOException {          // TODO Auto-generated method stub          int port = 8888;          NIOServer server = new NIOServer(port);          server.listen();      }  }

Java代码:

import java.io.IOException;  import java.net.InetSocketAddress;  import java.nio.ByteBuffer;  import java.nio.channels.SelectionKey;  import java.nio.channels.Selector;  import java.nio.channels.SocketChannel;  import java.util.Iterator;  import java.util.Set;   public class NIOClient {       /*标识数字*/     private static int flag = 0;      /*缓冲区大小*/     private static int BLOCK = 4096;      /*接受数据缓冲区*/     private static ByteBuffer sendbuffer = ByteBuffer.allocate(BLOCK);      /*发送数据缓冲区*/     private static ByteBuffer receivebuffer = ByteBuffer.allocate(BLOCK);      /*服务器端地址*/     private final static InetSocketAddress SERVER_ADDRESS = new InetSocketAddress(              "localhost", 1111);       public static void main(String[] args) throws IOException {          // TODO Auto-generated method stub          // 打开socket通道          SocketChannel socketChannel = SocketChannel.open();          // 设置为非阻塞方式          socketChannel.configureBlocking(false);          // 打开选择器          Selector selector = Selector.open();          // 注册连接服务端socket动作          socketChannel.register(selector, SelectionKey.OP_CONNECT);          // 连接          socketChannel.connect(SERVER_ADDRESS);          // 分配缓冲区大小内存                    Set selectionKeys;          Iterator iterator;          SelectionKey selectionKey;          SocketChannel client;          String receiveText;          String sendText;          int count=0;           while (true) {              //选择一组键,其相应的通道已为 I/O 操作准备就绪。              //此方法执行处于阻塞模式的选择操作。              selector.select();              //返回此选择器的已选择键集。              selectionKeys = selector.selectedKeys();              //System.out.println(selectionKeys.size());              iterator = selectionKeys.iterator();              while (iterator.hasNext()) {                  selectionKey = iterator.next();                  if (selectionKey.isConnectable()) {                      System.out.println("client connect");                      client = (SocketChannel) selectionKey.channel();                      // 判断此通道上是否正在进行连接操作。                      // 完成套接字通道的连接过程。                      if (client.isConnectionPending()) {                          client.finishConnect();                          System.out.println("完成连接!");                          sendbuffer.clear();                          sendbuffer.put("Hello,Server".getBytes());                          sendbuffer.flip();                          client.write(sendbuffer);                      }                      client.register(selector, SelectionKey.OP_READ);                  } else if (selectionKey.isReadable()) {                      client = (SocketChannel) selectionKey.channel();                      //将缓冲区清空以备下次读取                      receivebuffer.clear();                      //读取服务器发送来的数据到缓冲区中                      count=client.read(receivebuffer);                      if(count>0){                          receiveText = new String( receivebuffer.array(),0,count);                          System.out.println("客户端接受服务器端数据--:"+receiveText);                          client.register(selector, SelectionKey.OP_WRITE);                      }                   } else if (selectionKey.isWritable()) {                      sendbuffer.clear();                      client = (SocketChannel) selectionKey.channel();                      sendText = "message from client--" + (flag++);                      sendbuffer.put(sendText.getBytes());                       //将缓冲区各标志复位,因为向里面put了数据标志被改变要想从中读取数据发向服务器,就要复位                      sendbuffer.flip();                      client.write(sendbuffer);                      System.out.println("客户端向服务器端发送数据--:"+sendText);                      client.register(selector, SelectionKey.OP_READ);                  }              }              selectionKeys.clear();          }      }  }

感谢各位的阅读,以上就是"Java NIO代码怎么写"的内容了,经过本文的学习后,相信大家对Java NIO代码怎么写这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

数据 缓冲区 缓冲 通道 服务 服务器 选择 代码 套接字 阻塞 客户 客户端 标志 大小 学习 从中 内容 数字 标识 模式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 西藏果蔬配送软件开发 好的网络安全视频 企业封装软件开发 服务器 数据库同步 亿阳信通网络安全 计算机网络技术入门好的书籍 大型数据库原理 期末考试 金山区品牌软件开发定制报价表 网络安全基础考题 软件开发的市场状况 网络安全手抄报. 漂亮 网络安全共建和谐校园主题班会 微服务如何用数据库 文件管理服务器停止运行 数据库删除表格提示找不到源 东北大学网络安全学院专业 设计公司项目软件开发 畅销与滞销商品分析软件开发 优质的电脑服务器托管 大唐移动无线协议软件开发 mc服务器设置领地 iphone怎么关闭网络安全 手机怎样打开服务器管理器 域名解析的服务器地址 应急地理信息数据库更新实施方案 北京定制网络技术咨询机构 北京销售服务器工作站虚拟主机 软件开发工作量的度量单位6 网络安全技术线上答疑会 网络安全群组信息管理
0