java NIO实现

发布时间:2026/7/28 19:08:00

java NIO实现
NIO工作流程如图package nio;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.ServerSocketChannel;import java.nio.channels.SocketChannel;import java.nio.charset.Charset;import java.nio.charset.CharsetDecoder;import java.util.Iterator;import java.util.Set;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class Service {private static Charset charsetCharset.forName(UTF-8); private static CharsetDecoder decodercharset.newDecoder(); public static void main(String[] args) throws IOException { //1创建一个注册中心 Selector selectorSelector.open(); //2创建通道 ServerSocketChannel channelServerSocketChannel.open(); int port9200; //3把通道绑定到服务端口 channel.bind(new InetSocketAddress(port)); //4把通道注册到selector 非阻塞 channel.configureBlocking(false); channel.register(selector, SelectionKey.OP_ACCEPT); int connectionCount0; ExecutorService executorServiceExecutors.newFixedThreadPool(3); while(true){ //得到就绪的channel的数量 int readChannelCountselector.select(); if(readChannelCount0){ continue; } //得到就绪的channel的key SetSelectionKey selectedKeysselector.selectedKeys(); IteratorSelectionKey keyIteratorselectedKeys.iterator(); while(keyIterator.hasNext()){ SelectionKey keykeyIterator.next(); //可接收的通道 if(key.isAcceptable()){ ServerSocketChannel channel2(ServerSocketChannel) key.channel(); SocketChannel socketChannelchannel2.accept(); socketChannel.configureBlocking(false); socketChannel.register(selector, SelectionKey.OP_READ, connectionCount); }else if(key.isReadable()){ //交给线程处理读取数据 executorService.execute(new SocketProcess(key)); key.cancel(); } keyIterator.remove(); } } } static class SocketProcess implements Runnable{ SelectionKey key; private SocketProcess(SelectionKey key){ super(); this.keykey; } Override public void run() { try{ System.out.println(连接key.attachment()发来了readFormChannel()); }catch(Exception e){ e.printStackTrace(); } } private String readFormChannel() throws IOException{ SocketChannel channel(SocketChannel) key.channel(); int size1024; ByteBuffer bufferByteBuffer.allocateDirect(size); //定义一个更大的buffer ByteBuffer bigBuffernull; int count0; while((channel.read(buffer))!-1){ count; ByteBuffer tempByteBuffer.allocateDirect(size*(count1)); if(bigBuffer!null){ bigBuffer.flip(); temp.put(bigBuffer); } bigBuffertemp; buffer.flip(); bigBuffer.put(buffer); buffer.clear(); if(bigBuffer!null){ bigBuffer.flip(); try{ return decoder.decode(bigBuffer).toString(); }catch(Exception e){ e.printStackTrace(); } } } return null; } }}package nio;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SocketChannel;import java.nio.charset.Charset;import java.util.Scanner;public class Client {private static Charset charsetCharset.forName(UTF-8); public static void main(String[] args) { try{ SocketChannel channelSocketChannel.open(); boolean connectionchannel.connect(new InetSocketAddress(localhost, 9200)); System.out.println(connection); Scanner scannernew Scanner(System.in); System.out.println(请输入); String messagescanner.nextLine(); ByteBuffer bufferByteBuffer.wrap(message.getBytes(charset)); while(buffer.hasRemaining()){ int writedCountchannel.write(buffer); } }catch(Exception e){ e.printStackTrace(); } }}

相关新闻

GBase 8s数据库新存储引擎核心能力介绍之一

GBase 8s数据库新存储引擎核心能力介绍之一

2026/7/28 19:08:00

在数据量爆炸式增长、业务连续性要求日益严苛的今天,传统数据库存储架构正面临前所未有的挑战。南大通用GBase 8s数据库(gbase database)新一代存储引擎,围绕用户生产场景持续进化,以底层架构的全面革新,为…

专业级Wand增强工具:本地化配置与远程控制解决方案

专业级Wand增强工具:本地化配置与远程控制解决方案

2026/7/28 18:58:00

专业级Wand增强工具:本地化配置与远程控制解决方案 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer WandEnhancer是一款开源的本机客户端…

[具身智能-674]:ROSMASTER-M1(亚博智能 Yahboom)完整解析

[具身智能-674]:ROSMASTER-M1(亚博智能 Yahboom)完整解析

2026/7/28 18:58:00

基础定位ROSMASTER-M1 是麦克纳姆轮全向移动 ROS2 模块化开发机器人,主打室内 SLAM 建图导航、机器视觉、具身智能、大模型语音交互,兼容多类边缘 AI 主控,适合高校科研、机器人教学、算法验证。一、硬件架构分层(对应爆炸图&…

MATLAB在电力系统动态分析与仿真中的应用实践

MATLAB在电力系统动态分析与仿真中的应用实践

2026/7/28 19:48:02

1. 电力系统动态分析的核心价值 电力系统动态分析是确保电网安全稳定运行的关键技术手段。当我在某省级电网调度中心第一次接触到实际故障录波数据时,才真正理解这项技术的工程意义——2018年的一次区域性振荡事故导致7座220kV变电站失压,而事故前的动态…

Matlab振动信号多维度分析与工业设备故障预警系统

Matlab振动信号多维度分析与工业设备故障预警系统

2026/7/28 19:48:02

1. 项目概述 大型工业设备的振动信号分析一直是设备健康管理中的核心环节。这套基于Matlab开发的振动信号多维度分析与预警系统,能够对旋转机械、发电机组等关键设备进行实时监测和故障预警。我在某电力集团实施这套系统时,发现传统单维度振动分析会漏检…

中小企业知识产权管理系统选型指南与实战策略

中小企业知识产权管理系统选型指南与实战策略

2026/7/28 19:48:02

1. 为什么企业需要"好用不贵"的知识产权管理系统 知识产权管理正在从"奢侈品"变成企业标配。十年前,可能只有大型科技公司会专门部署IP管理系统,但现在连初创团队都在寻找合适的工具。核心原因很简单:专利、商标、版权这…

终极视频合成指南:ComfyUI-VideoHelperSuite VHS_VideoCombine节点完全解析

终极视频合成指南:ComfyUI-VideoHelperSuite VHS_VideoCombine节点完全解析

2026/7/28 19:48:02

终极视频合成指南:ComfyUI-VideoHelperSuite VHS_VideoCombine节点完全解析 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite 在AI视频生成和处理的浪潮…

C/C++ Util函数整理

C/C++ Util函数整理

2026/7/28 19:48:02

嵌入式C/C开发中,常用工具类函数整理分类,记录便于查询使用。 1、数组数据处理 void SetU16(uint8_t *buffer, uint16_t value) {buffer[0] value & 0xff;buffer[1] (value >> 8) & 0xff; }uint16_t GetU16(const uint8_t *buffer) {uin…

matlab调用ANSYS

matlab调用ANSYS

2026/7/28 19:38:01

最近使用ANSYS计算温度场方面的东西,每次都要手动运行,自己处理计算结果。可怜无助的我深感劳累啊,最主要的是怎么能把我宝贵的时间用在重复的劳动中。so,出于懒的需要,查询了一些关于matlab调用ANSYS的资料,经过自己实践,整理了以下内容。 1、调用ANSYS !"D:\AN…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/28 13:30:18

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/7/28 16:04:36

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/7/28 16:04:35

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…

零基础搭建桌面智能体,OpenClaw 2.7.9 分步实操,避开绝大多数部署陷阱

零基础搭建桌面智能体,OpenClaw 2.7.9 分步实操,避开绝大多数部署陷阱

2026/7/28 0:06:55

📌 一、工具核心优势盘点 数据本地存储,安全系数高所有操作日志、文档资料均保存在本机,不会上传至云端,能够有效保护企业文件与个人隐私,规避数据泄露风险。 上手简单,零编程门槛采用全图形化可视化界面&…

计算机毕业设计之基于springboot的购物平台设计与实现

计算机毕业设计之基于springboot的购物平台设计与实现

2026/7/28 0:06:55

由于移动应用技术的持续性的快速发展,现实生活中人们大多数都是通过移动手机、电脑等智能设备来完成生活中的事务。因此,许多的人工传统行业也开始与互联网结合,不再一味的依靠人工手动,努力打造半自动数字化甚至是全自动数字化模…

豆包AI绘图提示词失效真相:NLP模型层token截断机制首次披露,3招绕过字数限制

豆包AI绘图提示词失效真相:NLP模型层token截断机制首次披露,3招绕过字数限制

2026/7/28 0:06:55

更多请点击: https://codechina.net 第一章:豆包AI绘图提示词失效现象全景扫描 近期大量用户反馈,豆包(Doubao)AI绘图功能对常规提示词(Prompt)响应异常:语义明确的指令被忽略、中英…