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 中的数据。
-
java的NIO编程JavaNIO(NewI O)是一种可伸缩且非阻塞的I O,与传统的JavaIO不同。它允许同时处理多个连接,并且能够更快地处理I O操作,是构
-
环球快讯:拉车门、偷快递、盗电瓶……小偷小摸案,嘉定警方也绝不放过新民晚报讯(通讯员徐波记者杨洁)拉车门、偷快递、盗电瓶……此类小偷小摸案件有些虽然案值不大,但为人民群众深恶痛绝,
-
香港金管局承接71亿港元沽盘 银行体系结余跌穿700亿港元中新经纬4月4日电据《香港经济日报》4日报道,香港金管局早间公布,根据联汇机制,承接71 04亿港元沽盘,香港银行体系总结余将于4月6日跌至699
-
小学数学三年级上册分数题(三年级上册数学分数练习题)1、去百度文库,查看完整内容>内容来自用户:偷了五只猫055、两个分数的分子相同,分母小的分数比较大。2、()6 两个分数的分母相同,分子大的
-
厦大天文台对外开放 每次接受30人预约参观-热讯厦门大学天文台每周日下午对外开放。 (厦大天文台供图)本月起的每周日下午,厦门大学天文台(暂定名称)面向公众开放,市民可提前一周预约
-
焦点消息!宁夏住建厅13条措施助力民营经济发展■ 鼓励区内建筑企业与央企、区外企业组成联合体,采取联合体投标
-
燃油车价格战是否会透支未来?虽然卖得出去了,但是不可持续大家好,我是小韦!每天都会给大家分享新鲜事!近来,燃油车价格战在中国市场掀起了一波波的购车热潮,不少车型都出现了大幅度的降价。这让很
-
闪电快讯 | XNGP第一阶段能力落地 小鹏汽车总裁吴新宙称不输特斯拉记者严利婷豪掷125亿研发之后,小鹏汽车辅助驾驶迎来重大更新。3月31日晚间,小鹏汽车通过OTA升级推送第一阶段的XNGP智驾辅助功能。作为第二代
-
资讯推荐:战神电视剧央视网观看_战神电视剧1一53集观看芒果1、现在还没有全部更新完的,朋友给我一个地址能多更新几集,现在更新到32集了。2、你要看的话我就把地址给你。本文到此分
-
每日快看:康巴赫炒锅有哪些缺点铁锅(康巴赫炒锅有哪些缺点)1、康巴赫砂锅的抄缺点就是锅体相袭对而言比较重,而且做饭的时候噪音会比较大。2、不过相对于缺点而言,康巴赫炒锅有很多的优点,比如采用德
-
红花泡脚副作用有哪些的啊?_观速讯红花泡脚副作用有如果放的红花量比较多,可能会出现脚部皮肤发痒的现象,用红花泡脚还能够起到通经络温血脉的作用,对于体质虚寒的患者是有好
-
一梯两户3个单元怎么选(两梯两户三个单元的房子选哪一户)_世界焦点我最近也搬家了,以下是我的建议,供您参考。首先看小区尽量选择楼间距大一些的,这样有助于采光,三个单元建议你选最东边的单元,选择西户,
-
成都身份证网上补办条件成都市开通居民身份证丢失补领、损坏换领“全程网办”办理条件成都市户籍居民且同时符合以下条件:1 年满16周岁。2 现居民身份证有效期为...
-
国内汽车市场行情如何 汽车市场未来发展分析国内汽车市场行情如何汽车市场未来发展分析从中汽协获悉,由于消费者对更高折扣持有观望情绪,部分市场需求被抑制,降价促销直接导致经销商利
-
全球热点!玻璃纸粘死了怎么去除 玻璃粘的纸怎么能除掉1,用酒精或汽油中的一种擦玻璃纸,待软化后即可擦去。2,用电吹风加热撕下表层,用水加洗洁精清洗。3、用刀片一点一点刮,但是清除速度较慢,
-
环球播报:马卡:巴萨有望在本周完成15亿欧融资,然后推进诺坎普翻修计划直播吧4月3日讯据《马卡报》报道,巴萨进入最关键的一周,俱乐部有望在近几天内完成融资15亿欧元,然后他们将加紧推进诺坎
-
天书奇谈混元盘怎么获得_混元天书1、新手和进阶礼包给,也可以在银币商城买,也不贵60银1个花的是银票。2、如果充值了可以上交易行看看好多玩家都卖的。3、
-
官渡区2023年小学一年级新生报名入学网上信息确认指南-焦点热议为切实做好官渡区2023年小学一年级新生报名入学信息确认工作,根据昆明市一年级新生报名入学统一要求,昆明市主城区2023
-
扬州金泉:公司严格按照相关法律法规的规定履行信息披露事项,不存在美化业绩行为扬州金泉60330704月03日在投资者关系平台上答复了投资者关心的问题投资者公司为了上市是否美化业绩估值严重不合理扬州金泉董秘尊敬的投资者您
-
叶辰萧初然免费最新1、第2780章2、苏若离话一出口,何英秀便听的瞠目结舌。3、她设想过叶辰处置苏守道的一万种可能,但没想过叶辰会将苏守道
-
注册会计师一般报名时间是多久?注册会计师一般报名时间是多久?答:注册会计师报名时间为4月6日早8:00—4月28日晚8:00期间进行报名。记好时间,不要错过啦!测试一下您适不
-
世界观焦点:新能源汽车3月销量排行榜出炉 遥遥领先的还得是它【CNMO新闻】近日,据CNMO了解,相关博主统计并整理了新能源自主品牌车企们3月的交付量 销量排行榜。比亚迪依旧以绝对的优势称霸国内市场,而
-
有色金属行业:优选“电解铝+贵金属”组合有色金属行业:优选“电解铝+贵金属”组合
-
全球焦点!山东发布海上大风橙色、内陆大风黄色预警 预计3-5日将出现大风天气大众网·海报新闻记者杜虹晓济南报道4月1日,记者从山东省政府安委会办公室了解到,省气象台于4月1日16时30分发布海上大风橙色、内陆大风黄色
-
高青县委书记向高校学子发出邀请_天天动态3月30日,“高青—高校人才直通车”活动在济南齐鲁工业大学(长清校区)盛大开启,高青县委书记刘学圣带队,高青81家企业开出1500+岗位的人才...
-
固定资产清理1、固定资产清理是因磨损、遭受非常灾害和意外事故而丧失生产能力,或因陈旧过时,须淘汰更新的固定资产,所办理的鉴定、报废、
-
世界微速讯:韭菜农药残留限量上调25倍,不能吃了?回应:此前引用的是洋葱数据韭菜是大家都比较熟悉的一种常见蔬菜,加工和食用方式都非常多样,因为鲜美的口感和独特的香味儿而受到很多消费者的欢迎。日前,
-
报告:预计二季度全国房地产市场将保持平稳态势-全球快播报《报告》指出,今年春节以来,重点城市房地产市场持续回暖,“小阳春”行情启动,一季度百城销售面积实现正增长,特别是热点城市市场回暖明...
-
泰国45天免签和30天落地签临时政策已于3月31日截止泰国对部分国际游客实施的45天免签证和30天落地签证临时政策于当地时间3月31日截止。2022年9月,泰国政府出台临时政
-
每日看点!信都区:创新治理模式使丘陵增绿让矿山复绿本报讯(记者杨煜兴)日前,走进信都区西黄村镇东岳村,山腰整齐的松柏、山杏、酸枣等树苗迎风挺立,山间平整后的大片土地种满了油菜,放眼望