java的NIO编程 天天观焦点
Java NIO(New I/O)是一种可伸缩且非阻塞的 I/O,与传统的 Java IO 不同。它允许同时处理多个连接,并且能够更快地处理 I/O 操作,是构建高性能、可伸缩和并发应用程序的重要组成部分。
Java NIO 的核心是 Channel、Buffer 和 Selector。Channel 是连接源和目标的通道,Buffer 是数据传输的缓冲区,Selector 用于监视 Channel 中的事件并选择可用的 Channel 进行操作。下面我们来看一下 Java NIO 的示例。
Channel
在 Java NIO 中,所有的 I/O 操作都是通过 Channel 来进行的。Channel 类似于传统的流,但又有所不同。在 Channel 中,数据可以从 Channel 中读取到 Buffer 中,也可以将数据从 Buffer 写入 Channel 中。
(资料图)
下面是一个从文件中读取数据并输出到控制台的示例:
javaCopy codeimport java.io.*;import java.nio.*;import java.nio.channels.*;public class ChannelExample { public static void main(String[] args) throws IOException { RandomAccessFile file = new RandomAccessFile("test.txt", "rw"); FileChannel channel = file.getChannel(); ByteBuffer buffer = ByteBuffer.allocate(1024); while (channel.read(buffer) != -1) { buffer.flip(); while (buffer.hasRemaining()) { System.out.print((char) buffer.get()); } buffer.clear(); } channel.close(); file.close(); }}
在上述示例中,我们使用 FileChannel 打开一个文件,并使用 ByteBuffer 分配一个缓冲区。然后使用 channel.read() 方法从文件中读取数据到缓冲区,使用 buffer.flip() 方法将缓冲区的指针移到缓冲区的起始位置,并使用 buffer.hasRemaining() 和 buffer.get() 方法遍历缓冲区中的数据。
Buffer
Buffer 是一个用于读写数据的缓冲区,它可以存储任何类型的数据,例如字节、字符、整数等等。Buffer 是一个抽象类,主要有以下几种子类:ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer 和 DoubleBuffer。
下面是一个使用 ByteBuffer 存储数据并将其输出到控制台的示例:
import java.nio.*;public class BufferExample { public static void main(String[] args) { ByteBuffer buffer = ByteBuffer.allocate(1024); buffer.put("Hello, world!".getBytes()); buffer.flip(); while (buffer.hasRemaining()) { System.out.print((char) buffer.get()); } buffer.clear(); }}
在上述示例中,我们使用 ByteBuffer 分配一个缓冲区,并使用 put() 方法将一个字符串存储到缓冲区中。然后使用 flip() 方法将缓冲区的指针移到缓冲区的起始位置,并使用 hasRemaining() 和 get() 方法遍历缓冲区中的数据。
Selector
Selector 用于监视 Channel 中的事件并选择可用的 Channel 进行操作。在 Java NIO 中,一个线程可以同时处理多个连接,因此它比传统的 Java IO 更快和更可伸缩。
下面是一个使用 Selector 监视 Channel 的示例:
javaCopy codeimport java.io.*;import java.nio.*;import java.nio.channels.*;public class SelectorExample { public static void main(String[] args) throws IOException { ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); serverSocketChannel.socket().bind(new InetSocketAddress("localhost", 8080)); serverSocketChannel.configureBlocking(false); Selector selector = Selector.open(); serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT); while (true) { int readyChannels = selector.select(); if (readyChannels == 0) { continue; } for (SelectionKey key : selector.selectedKeys()) { if (key.isAcceptable()) { ServerSocketChannel server = (ServerSocketChannel) key.channel(); SocketChannel client = server.accept(); client.configureBlocking(false); client.register(selector, SelectionKey.OP_READ); } else if (key.isReadable()) { SocketChannel client = (SocketChannel) key.channel(); ByteBuffer buffer = ByteBuffer.allocate(1024); client.read(buffer); buffer.flip(); while (buffer.hasRemaining()) { System.out.print((char) buffer.get()); } } selector.selectedKeys().remove(key); } } }}
在上述示例中,我们使用 ServerSocketChannel 打开一个服务器,并使用 Selector 监视该服务器。当有客户端连接时,使用 accept() 方法获取客户端的 SocketChannel 并注册到 Selector 中,并指定监听 OP_READ 事件。当客户端向服务器发送数据时,使用 read() 方法将数据读取到 ByteBuffer 中,并使用 buffer.hasRemaining() 和 buffer.get() 方法遍历 ByteBuffer 中的数据。
标签:
- 抢占2023大市场,叼嘴巴叼嘴王胶姆糖在行动!聚焦热销品类,掀起销售热潮!
- 黄山提升政府采购透明度 助力实体经济持续健康稳定发展
- 1-2月黄山新签“双招双引”项目103个 总投资额139.7亿元
- 池州海关共签发RCEP原产地证书22份 签证金额92.7万美元
- 宿州泗县深入推进文旅融合发展 擦亮城市品牌
- 河北工业生产平稳开局 固定资产投资较快增长
- 昆明西山区深入实施人才强区战略 建立健全招商招才引资并轨新模式
- 2月唐山新建商品住宅销售价格与上月持平 同比下降0.8%
- 去年河北电子信息产业实现主营业务收入2367.7亿元 同比增长22.4%
- 绥化望奎以工业化思维为引领 推动肉类加工制造产业腾飞
- 绥化市监局推出多项举措 大力促进有机产品产业发展
- 半路出家无心插柳 杭州西湖区“菌菇宝宝”变废为宝
- 温州鹿城区藤桥主打藤桥熏鸡 近两年销售额年均增长20%以上
- 1-2月安徽限额以上消费品零售额1030.4亿元 同比增长10.4%
- 2021年合肥市茶园面积13.6万亩 产值176350万元
- 淡季不忘引流 京郊民宿市场将很快迎来回暖
- 郴州安仁文旅项目集中开工 总投资1000万元
- 江苏服务业继续保持发展强劲势头 为高质量发展提供有力支撑
- 黄山休宁经开区摸排基础设施项目17个 计划总投资29709万元
- 前两个月宣城出口31亿元 增长34.4%
- 滁州凤阳2021年共接待游客225万人次 旅游综合收入20.25亿元
- 1-2月宿州市民间投资同比增长19.2% 居全省第3位
- 宿州严格审核把关 抢抓发行地方政府专项债券政策机遇
- 1-2月亳州市进出口总值5.5亿元 同比下降17.4%
- 合肥:弘扬茶文化 初步形成一条生态发展之路
- 合肥:建成“数字中国”领先城市 推进城市数字化转型
- 甘肃再续“艾黎情”:探职业教育德技并修
- 【城市守望者】致敬抗“疫”一线的“拆弹专家”
- 浙江绍兴越城区核酸检测结果公布 除1例阳性外其余均为阴性
- 内地首例奥密克戎变异株感染者身体状况如何?来自哪里?专家解读→
- 对变异病毒已有准备!关于中国新冠药物,钟南山发声→
- 江苏睢宁小网格大担当 织就乡村振兴“幸福网”
- 改造老旧小区 共享幸福生活
- 天津静海:群众在哪里,文明实践就延伸到哪里
- 齐齐哈尔:初步判断疫情感染来源为接触新冠病毒污染环境和物品
- 重庆大竹林派出所副所长因对群众态度简单粗暴被停职
- 黑龙江讷河病例感染源初步判断为新冠病毒污染的环境和物品
- 致敬2021
- 浙江瑞安民警捐献造血干细胞:14年前的心愿终将如愿
- “考研房”涨价离谱 律师:借机宰客有违市场伦理
- 广州白云机场:14天内有东莞旅居史的旅客须凭48小时核酸阴性证明乘机
- 浙江绍兴本轮疫情已报告确诊病例145例 无症状感染者1例
- 福建龙岩一男子和前妻斗气 扛着126斤硬币到法院“还钱”
- 重庆这座立交酷似“悟空” 走红 设计师揭秘(图)
- 青海警方破获特大电诈案 涉案流水高达1.7亿
- 云南新增境外输入确诊病例3例
- 黑龙江讷河市5名核酸阳性人员流调溯源:接触被新冠病毒污染的环境和物品
- 男子爱上女主播 假扮女主播闺蜜教其他男粉丝刷单
- 广西三市警方联手破获毒品案 全链条摧毁跨境贩毒团伙
- 广东东莞发现2例无症状感染者,部分镇今起全员筛查
- 从百二秦关到闻道凯旋 一个殉职医生最后的朋友圈
- 浙江发补充说明:三地铁路出行政策随风险等级同步调整
- 内蒙古新增本土确诊病例5例 均在呼伦贝尔满洲里市
- 陕西新增本土确诊病例1例 系隔离酒店工作人员
- 31省份新增新冠肺炎确诊病例76例 其中本土51例
- 浙江新增新冠肺炎确诊病例45例 其中本土44例
- 技能就是财富 技工也是人才
- 黑龙江新增本土确诊病例1例、本土无症状感染者4例
- 冷空气“调休”!我国大部陆续迎回暖 中东部雨雪稀少
- 华北黄淮等地大气扩散条件转差 冷空气将影响中东部
- 别误读了野猪或将不再是“三有”动物
- 您的ETC已到期?当心这个诈骗短信!
- 对回家的“宝贝”少一些关注,也是一种帮助
- 升温!北京今日阳光在线 最高气温将升至8℃
- 那年今日 | 一张漫画涨知识之12月14日
- 40岁男子一觉醒来突然听不见了 原因是……
- 本年度星空压轴大赏上演 双子座流星雨观赏地图来了
- 广东东莞大朗镇报告2例新冠肺炎无症状感染者
- 商丘4885份被盗出生证去哪了?10年“悬案”引关注
- 浙江海宁警方通报国家公祭日女子穿和服逛街
- 厨艺不精调料凑?懒人调料:年轻人的“下厨神器”
- “您的ETC已到期?”警方提醒:当心这个诈骗短信
- “网红”局长的热度 自述:走红后我就没有周末了
- 寻回被拐10年的儿子后又送走 儿子:害我没家了
- 小城里的三张面孔和警号301137
- 倡导“就地过年”,需因地制宜科学防疫
- 别用“入乡随俗”为星巴克找借口
- 北京地铁14号线年底全线贯通运营
- 天津市从入境人员中检出奥密克戎变异株
- “外滩活地图”黄俊:一个不想出圈的段子手交警
- 寻找一双儿女的25年
- 无锡市场监管部门责成星巴克涉事门店停业整改
- 海岛警事:为了一座岛和2900平方公里的海
- 北京民警宏福苑抗疫26天:“今夜我和雪花一起出发”
- 星巴克的“金标准”缘何败给了“潜规则”
- 患者被低价药“惊呆”的场面应该更多些
- 影视剧“超前点评”不止是“低级错误”
- “南昌鹦鹉案”下发不起诉决定书 网店上架费氏牡丹鹦鹉被拒
- 河南商丘4885份出生医学证明被盗始末追踪
- 绍兴市病例62-109活动轨迹公布
- 12月7日以来,杭州累计报告新冠肺炎确诊病例19例
- 浙江绍兴新增确诊病例37例 上虞区占36例
- 河南高院对张成功案作出死刑判决
- 四川一滑雪场停电游客被困索道 官方回应
- 浙江绍兴越城区新增1例新冠肺炎确诊病例 当地对防控区域划分进行调整
- 中国内地首次检出新冠病毒奥密克戎变异株
- 知网除了涉及著作权纠纷,是否涉嫌违反《反垄断法》?
- 浙江绍兴越城区新增1例新冠肺炎确诊病例
- 四川眉山千箱柑橘送往呼和浩特市抗疫一线
- 两名青年男女探险三亚落笔洞遗址被困沼泽 消防成功救援
广告
广告
- java的NIO编程 天天观焦点
- 双杰电气于内蒙古新设子公司 经营范围含储能技术服务 重点聚焦
- 打造高水平科技创新平台
- 世界热点评!福建:发展新兴产业 构建新发展格局
- 每日热议!景泰县气象台发布霜冻蓝色预警信号
- 中国央行公开市场本周共1.161万亿元逆回购到期 今日热门
- 天天热点!我国新收集农作物种质资源12.4万份
- 商家频“跑路” 预付费消费须短期少存看清合同 天天热推荐
- 热议:易武茶的特点和口感 后闻即命易武秩遂授常德军承宣使干办皇城司
- 柯洁:人类和AI不会真正对立起来|天天微动态
- 世界银行警告:全球经济增长将出现“失落的十年” 每日热讯
- 天天日报丨回顾张国荣生前最后一次亮相具体详细内容是什么
- 久其软件:本年单项计提坏账准备3740.76万元
- 宇智波鼬高清电脑壁纸_宇智波鼬的兴趣_独家焦点
- 任泉王京花公司涉非法吸收公众存款案,因拒还8500万被限制消费-焦点短讯
- 快乐阅读手抄报内容怎么写_快乐阅读手抄报内容-速看料
- 京汉控股所持奥园美谷7.93%股份被司法冻结-天天聚看点
- 影视快讯:漫威又出新角色,正邪未知,战力堪比惊奇队长
- 累计罚没1.22亿!深圳证监局最新执法通报,这些典型案例值得警醒 前沿热点
- 掮客是什么意思_肩客