我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java NIO代码怎么写

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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<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代码怎么写这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java NIO代码怎么写

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

下载Word文档

猜你喜欢

Java NIO代码怎么写

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

Java堆代码怎么写

这篇文章主要介绍了Java堆代码怎么写的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java堆代码怎么写文章都会有所收获,下面我们一起来看看吧。1、堆的定义①、它是完全二叉树,除了树的最后一层节点不需要是满的,
2023-06-28

java验证码代码怎么写

以下是一个简单的Java验证码生成代码示例:```javaimport java.util.Random;public class VerificationCode {public static void main(String[] arg
2023-08-09

如何编写 Java 爱心代码?(java爱心代码怎么写)

在Java编程中,编写一个爱心代码是一件很有趣的事情,它不仅可以展示你的编程技巧,还可以给你带来一些乐趣。下面,我将为大家详细介绍如何编写Java爱心代码。一、准备工作安装Java开发环境(JDK):如果
如何编写 Java 爱心代码?(java爱心代码怎么写)
Java2024-12-17

java排序代码怎么写

有很多种排序算法可以在Java中实现,以下是一些常见的排序算法的示例代码:1. 冒泡排序(Bubble Sort)```javapublic class BubbleSort {public static void bubbleSort(i
2023-08-17

如何编写 Java 二叉树代码?(java二叉树代码怎么写)

在Java编程中,二叉树是一种重要的数据结构,它具有广泛的应用。编写Java二叉树代码需要掌握一些基本的概念和技巧。以下是编写Java二叉树代码的详细步骤:一、理解二叉树的基本概念二叉树是一种每个节点最多有两个子节点
如何编写 Java 二叉树代码?(java二叉树代码怎么写)
Java2024-12-21

Java哈希法代码怎么写

这篇文章主要介绍了Java哈希法代码怎么写的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java哈希法代码怎么写文章都会有所收获,下面我们一起来看看吧。1、哈希函数的引入大家都用过字典,字典的优点是我们可以通过
2023-06-28

java的NIO管道用法代码分享

Java的NIO中的管道,就类似于实际中的管道,有两端,一段作为输入,一段作为输出。也就是说,在创建了一个管道后,既可以对管道进行写,也可以对管道进行读,不过这两种操作要分别在两端进行。有点类似于队列的方式。这里是Pipe原理的图示:创建管
2023-05-30

如何编写 Java 特效网页代码?(java特效网页代码怎么写)

在当今的互联网时代,网页设计越来越注重特效的运用,以吸引用户的注意力并提升用户体验。而Java作为一种强大的编程语言,在实现特效网页方面具有很大的优势。那么,Java特效网页代码到底怎么写呢?下面我们将分步骤为大家详细介绍。一、准备工作
如何编写 Java 特效网页代码?(java特效网页代码怎么写)
Javajava特效2024-12-22

如何编写 Java pattern 的代码示例?(java pattern的代码示例怎么写)

在Java编程中,pattern(模式)是用于正则表达式的重要概念。正则表达式是一种强大的文本匹配工具,它可以用来检查一个字符串是否符合某种模式,或者从字符串中提取符合特定模式的部分。以下是关于如何编写Javapattern的代码示
如何编写 Java pattern 的代码示例?(java pattern的代码示例怎么写)
Java2024-12-19

java实现线程代码怎么写

在Java中,可以使用以下两种方式实现线程:继承Thread类public class MyThread extends Thread {public void run() {// 线程执行的代码逻辑}}// 创建并启动线程MyThr
java实现线程代码怎么写
2023-10-28

java防sql注入代码怎么写

这篇文章将为大家详细讲解有关java防sql注入代码怎么写,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java 防 SQL 注入代码SQL 注入是一种常见的 Web 安全漏洞,它允许攻击者通过恶意的 SQL 查询来操纵数据库。为了防止 SQL 注入,开发者必须对用户输入进行适当的验
java防sql注入代码怎么写
2024-04-10

java欢迎界面代码怎么写

以下是一个简单的Java欢迎界面代码示例:```javaimport java.util.Scanner;public class WelcomeScreen {public static void main(String[] args)
2023-08-12

java玫瑰花束代码怎么写

以下是一个简单的 Java 程序,它可以打印出一个玫瑰花束的图案:public class RoseBouquet {public static void main(String[] args) {// 打印出花束的第一行System.ou
2023-05-13

java特效网页代码怎么写

Java特效网页代码的编写需要以下步骤:1.了解Java的基本语法和语言特性。2.选择一个合适的Java IDE(集成开发环境),例如Eclipse或者NetBeans。3.创建一个新的Java项目,并添加必要的库文件。4.编写Java代码
2023-05-30

java防sql注入代码怎么写

为了防止SQL注入攻击,您可以采取以下Java代码编写方法:1. 使用预编译的语句和参数化查询。```javaString sql = "SELECT * FROM users WHERE username = ? AND password
2023-08-25

java实现时钟代码怎么写

以下是一个简单的Java代码示例,用于实现一个时钟:```javaimport java.time.LocalTime;import java.time.format.DateTimeFormatter;public class Clock
2023-08-29

java降序排序代码怎么写

你可以使用 `Collections.sort()` 方法和 `Comparator` 接口来实现降序排序。以下是一个示例代码:```javaimport java.util.ArrayList;import java.util.Colle
2023-10-11

如何编写 Java 插入排序代码?(java插入排序代码怎么写)

在Java编程中,插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入,直到整个数组有序。下面我们来详细了解如何编写Java插入排序代码。一、理解插入排序的基本原理
如何编写 Java 插入排序代码?(java插入排序代码怎么写)
Java2024-12-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录