广告
返回顶部
首页 > 资讯 > 精选 >Java NIO代码怎么写
  • 796
分享到

Java NIO代码怎么写

2023-06-17 11:06:55 796人浏览 泡泡鱼
摘要

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

这篇文章主要讲解了“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<SelectionKey> selectionKeys = selector.selectedKeys();              Iterator<SelectionKey> 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);          }      }            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<SelectionKey> selectionKeys;          Iterator<SelectionKey> 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代码怎么写这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Java NIO代码怎么写

本文链接: https://www.lsjlt.com/news/288792.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java NIO代码怎么写
    这篇文章主要讲解了“Java NIO代码怎么写”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java NIO代码怎么写”吧!Java代码:import java.io.IOExce...
    99+
    2023-06-17
  • Java堆代码怎么写
    这篇文章主要介绍了Java堆代码怎么写的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java堆代码怎么写文章都会有所收获,下面我们一起来看看吧。1、堆的定义①、它是完全二叉树,除了树的最后一层节点不需要是满的,...
    99+
    2023-06-28
  • java验证码代码怎么写
    以下是一个简单的Java验证码生成代码示例:```javaimport java.util.Random;public class ...
    99+
    2023-08-09
    java
  • java排序代码怎么写
    有很多种排序算法可以在Java中实现,以下是一些常见的排序算法的示例代码:1. 冒泡排序(Bubble Sort)```javapu...
    99+
    2023-08-17
    java
  • Java哈希法代码怎么写
    这篇文章主要介绍了Java哈希法代码怎么写的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java哈希法代码怎么写文章都会有所收获,下面我们一起来看看吧。1、哈希函数的引入大家都用过字典,字典的优点是我们可以通过...
    99+
    2023-06-28
  • java降序排序代码怎么写
    你可以使用 `Collections.sort()` 方法和 `Comparator` 接口来实现降序排序。以下是一个示例代码:``...
    99+
    2023-10-11
    java
  • Java归并排序代码怎么写
    本篇内容主要讲解“Java归并排序代码怎么写”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java归并排序代码怎么写”吧!归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,...
    99+
    2023-06-17
  • Java冒泡排序代码怎么写
    本篇内容介绍了“Java冒泡排序代码怎么写”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!冒泡排序是计算机的一种排序方法,它的时间复杂度为O(...
    99+
    2023-06-17
  • java实现时钟代码怎么写
    以下是一个简单的Java代码示例,用于实现一个时钟:```javaimport java.time.LocalTime;import...
    99+
    2023-08-29
    java
  • 怎么写出优雅的Java代码
    这篇文章主要讲解了“怎么写出优雅的Java代码”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么写出优雅的Java代码”吧!1.使用 IntelliJ IDEA 作为您的集成开发环境 (ID...
    99+
    2023-06-16
  • java实现线程代码怎么写
    在Java中,可以使用以下两种方式实现线程: 继承Thread类 public class MyThread extends Th...
    99+
    2023-10-28
    java
  • java玫瑰花束代码怎么写
    以下是一个简单的 Java 程序,它可以打印出一个玫瑰花束的图案:public class RoseBouquet {public ...
    99+
    2023-05-13
    java玫瑰花束 java
  • java特效网页代码怎么写
    Java特效网页代码的编写需要以下步骤:1.了解Java的基本语法和语言特性。2.选择一个合适的Java IDE(集成开发环境),例...
    99+
    2023-05-30
    java特效 java
  • java设为首页代码怎么写
    要将Java设为浏览器的首页,你可以使用以下代码:```javaimport java.util.prefs.Preferences...
    99+
    2023-08-12
    java
  • java欢迎界面代码怎么写
    以下是一个简单的Java欢迎界面代码示例:```javaimport java.util.Scanner;public class ...
    99+
    2023-08-12
    java
  • java防sql注入代码怎么写
    为了防止SQL注入攻击,您可以采取以下Java代码编写方法:1. 使用预编译的语句和参数化查询。```javaString sql ...
    99+
    2023-08-25
    java sql
  • java的NIO管道用法代码分享
    Java的NIO中的管道,就类似于实际中的管道,有两端,一段作为输入,一段作为输出。也就是说,在创建了一个管道后,既可以对管道进行写,也可以对管道进行读,不过这两种操作要分别在两端进行。有点类似于队列的方式。这里是Pipe原理的图示:创建管...
    99+
    2023-05-30
    java nio 管道
  • java稀疏数组的代码怎么写
    这篇文章主要介绍了java稀疏数组的代码怎么写的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java稀疏数组的代码怎么写文章都会有所收获,下面我们一起来看看吧。稀疏组织当一个数组中大部分元素为0,或者为同一个值...
    99+
    2023-07-02
  • java添加记录的代码怎么写
    要向Java中的数据结构(如数组、列表、集合、映射等)添加记录,可以使用以下代码示例: 向数组中添加记录: // 定义一个数组 i...
    99+
    2023-10-27
    java
  • 怎么写Java让代码性能更高
    这篇文章主要介绍“怎么写Java让代码性能更高”,在日常操作中,相信很多人在怎么写Java让代码性能更高问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么写Java让代码性能更高”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作