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 中的数据。
标签:
责任编辑:hnmd003
相关阅读
-
快看点丨1胜7负,无缘季后赛!全联盟得分最高的双人组,刚组队就要散伙
1胜7负,无缘季后赛!全联盟得分最高的双人组,刚组队就要散伙,湖人,东契奇,勇士队,nba,雷霆队,全联盟,...
2023-04-03 -
哈工智能(000584.SZ):拟2亿元转让黑龙江严格40%股权予延格投资
格隆汇4月3日丨哈工智能(000584 SZ)公布,公司子公司上海我耀机器人有限公司(简称“上海我耀”)参股公司黑龙江严
2023-04-03 -
环球快资讯丨坚朗五金(002791.SZ):高管黄庭来减持期过半 已减持1.6万股
格隆汇4月3日丨坚朗五金(002791 SZ)公布,近日,公司收到高管黄庭来的《关于公司股份减持计划时间过半...
2023-04-03 -
快看点丨1胜7负,无缘季后赛!全联盟得分最高的双人组,刚组队就要散伙
1胜7负,无缘季后赛!全联盟得分最高的双人组,刚组队就要散伙,湖人,东契奇,勇士队,nba,雷霆队,全联盟,...
2023-04-03 -
焦点快播:德信中国披露业绩补充公告 称开元信德同意公布去年度财报数据
4月3日,德信中国控股有限公司披露截至2022年12月31日止年度业绩公告补充公告。据悉,德信中国外部核数...
2023-04-03 -
【全球独家】报告:3月65城二手房挂牌均价环比跌0.21%
报告显示,3月全国重点监测的65城新房线上均价为17715元 ㎡,环比微跌0 03%;3月全国65个主要城市二手...
2023-04-03 -
微头条丨CNN:住房危机令葡萄牙人苦不堪言 高通胀带来高房价高房租被人们赶出住房
中国小康网04月3日讯老马上周六,数千人走上里斯本和葡萄牙其他城市的街头,抗议高通胀使人们更加难以维...
2023-04-03 -
哈工智能(000584.SZ):拟2亿元转让黑龙江严格40%股权予延格投资
格隆汇4月3日丨哈工智能(000584 SZ)公布,公司子公司上海我耀机器人有限公司(简称“上海我耀”)参股公司黑龙江严
2023-04-03 -
环球快资讯丨坚朗五金(002791.SZ):高管黄庭来减持期过半 已减持1.6万股
格隆汇4月3日丨坚朗五金(002791 SZ)公布,近日,公司收到高管黄庭来的《关于公司股份减持计划时间过半...
2023-04-03 -
天天资讯:墨菲获斯诺克巡回锦标赛冠军 19名中国选手出战世锦赛资格赛
北京时间3日晨,2023年斯诺克巡回锦标赛在英国收官,大满贯得主、“魔术师”肖恩·墨菲在决赛中以10:7战...
2023-04-03 -
CLARKS ORIGINALS X RONNIE FIEG经典潮流来袭 8th Street联名系列国内首次发售
近日风靡的王炸组合KITH X Clarks Originals 三方联名鞋款在知名设计师兼 KITH 主理人 Ronnie F...
2023-04-03
阅读排行
资讯播报
- 甜啦啦跻身“2023新锐品牌百强榜”
- 全球新消息丨建业地产:2022全年...
- 焦点速看:陕西建工集团完成发行...
- 【世界聚看点】国乒公布德班世乒...
- 歼-8,一代军迷的青春
- 全球最新:大名城定增6亿股申请...
- 微头条丨二手房市场供需两旺 超...
- 喜报!韩正人参荣获吉林省“专精...
- MOTI魔笛斩获2023德国红点奖,以...
- 【新视野】中交三航局30亿元应收...
- 【独家】8省(市)百余名滑雪运...
- 杭州国资投资运营完成发行10亿短...
- 世界观察:合肥城建:公司以35.0...
- 新资讯:诸葛找房:3月新房成交...
- 儒风鲁韵叙商道 昆仑山矿泉水亮...
- 全球观天下!东莞楼市新政:严控...
- 焦点报道:2023年杭州生育险交多...
- 财报金选丨朗诗绿色管理:2022年...
- 碳化硅的应用成为提升电机能效的...
- PHISKIN芙艾医疗携Fotona欧洲之...
- 当前热文:全球每台特斯拉都是测...
- 万表414手表节开启,大牌名表天...
- 成都糖酒会,百年糊涂以老酱香为...
- 烫伤、无证“狂飙”,热玛吉还好...
- idisplay是什么软件?如何将手机...
- win7系统双击我的电脑打不开是哪...
- 今亮点!英雄之光|17家媒体为石...
- 系统任务栏颜色为什么默认是黑色...
- 保利置业集团(00119.HK):截至3...
- 观热点:越秀地产:广州区域签约...
- 港股异动 | 呷哺呷哺(00520)午...
- “最美天路”来了!滇藏铁路云南...
- 凯德投资斥超1.4亿新元收购日本...
- 当前热讯:全国首个校园高尔夫学...
- 基石牢筑,财务稳健,合生创展成...
- 天天观点:陕西西咸新区发展集团...
- 六年正增长,康师傅携手航天的进...
- 当前观点:雅居乐获23亿港元及36...
- 一个月港元拆息跌4.59点子至3.0953%
- 天天观天下!三人篮球亚洲杯 中...
- 环球动态:报告:3月楼市成交量大...
- 主场上演逆转好戏 广东宏远击败山东
- 天天时讯:F1澳大利亚大奖赛 中...
- 环球热消息:中国短道速滑队主教...
- 营收2675亿,净利率仅2.62%!顺...
- 极萌万众期待,惊喜即将来袭
- 家用美容仪新锐品牌重磅来袭——...
- 头条焦点:西大门:公司部分车间...
- 即时焦点:浙江余姚工业园区建设...
- 郑州市医保卡挂失补办有几种方法...
- 周口城投10亿元私募债项目更新至...
- 1号生产线顺利出铁,印尼OBI镍铁...
- 医保卡可以在医院买一些生活用品...
- 医保个人账户可以帮助支付家庭成...
- 百亿基金经理真的不能买吗?一个...
- 环球视讯!2023年北京市民体质促...
- 【当前独家】“浦西第一高楼”开...
- 全球实时:含柳的诗句古有哪些完整
- 广西落实落细积极财政政策
- 奔跑在春天里!2000名选手在广州...
- 62场乒乓球比赛存在打假球之嫌?...
- 环球动态:攻坚长尾难题,Apollo...
- 海南将在2025年底前适时启动全岛...
- 4月20日起北京植牙将大幅降价
- 环球微速讯:朗诗绿色管理:2022...
- 全球观点:从“木牛流马”到“汽...
- 最新快讯!银鱼干发黄还能吃吗 ...
- 天天滚动:QuantumScape固态电池...
- 论文推荐 | 综述:自动驾驶背...
- 视焦点讯!电机动力目前已经够用...
- 环球焦点!西安雁塔区推出2宗共1...
- 全国短道速滑冠军赛:刘少昂收获...
- 每日消息!比亚迪继续加大研发投...
- 刘少林与刘少昂:走上领奖台,从...
- 速递!建设银行投资金条价格今天...
- 全球即时看!神十五乘组在轨4个...
- 2023年香港国际七人榄球赛落幕 ...
- 世界热议:宋城演艺实控人黄巧灵...
- 两部门发文要推进的“带押过户”...
- 【天天聚看点】斯巴达勇士儿童赛...
- 每日快报!金观平:吸收外资扩量...
- 全球即时看!全国短道速滑冠军赛...
- 环球观热点:华电集团拟转让长江...
- 大疆全新一代智能驾驶解决方案正...
- 【我们的家园】四川绵阳:互帮互...
- 三巽控股2022收入44.88亿元 应...
- 中国台湾音乐界四大三小分别是谁...
- 电视剧《光荣时代》候鸟是谁?张...
- 鬼吹灯系列《昆仑神宫》下一部是...
- 茅台镇百年酱酒生产工艺及标准的...
- 优衣库全民健康运动会登陆广州 ...
- 全球速看:中指研究院企业研究总...
- 沿着黄河遇见海丨薄至头发丝的两...
- 关于规范网络祭扫秩序 倡导文明...
- 环球新消息丨2022年我国经常账户...
- 全球球精选!“圆梦乘组”在轨满...
- 环球头条:被“诅咒”的家族,背...
- 天天简讯:辽宁深入实施城市更新行动
- 世界时讯:新华社权威快报 | 4...
- 乘用车制动法规详解