首页>资讯 > 民生资讯 > 正文

当前资讯!java的NIO编程

来源:腾讯云    2023-04-04 10:29:08

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操作,是构

环球消息!特斯拉种族歧视案赔偿减至350万美元 马斯克回应:应该一分不赔!

美国旧金山联邦法院一个陪审团周一裁定,特斯拉公司因未能保护一名前黑人合同工免受种族歧视,应赔偿320万美元,比2021年一个陪审团最初裁定的

定期存单可以在不同的网点取款吗?定期存款单丢了可以取钱吗?

定期存单可以在不同的网点取款吗?定期存单可以在不同的网点取款,但是定期存单是不支持异地支取的,一旦跨省则无法办理提取业务。所以用户

打新债中签后卖出技巧有哪些?中签新债破发怎么办?

打新债中签后卖出技巧有哪些?【1】上市第一天抓住机会,因为很多可转债是上市第一天涨幅最大价格最高的,可以直接挂130元的价格卖出。【2】

月收入5000怎么理财?月收入2000如何理财?

月收入5000怎么理财?1 节流我们可以在每次发工资之后,将工资的20%存起来,其实这个月你花80%的钱和你花100%的钱生活质量差距并不是很大,

基金风险大还是理财产品风险大?投资货币风险大吗?

基金风险大还是理财产品风险大?基金与理财产品的风险是不能直接比对的,因为理财产品分为很多种,基金的风险也分很多种,不同种类风险的基

怎么理解买空和卖空?做空做多是什么意思?

怎么理解买空和卖空?【1】买空:这就是融资交易,是指自有资金不足时,投资者向证券公司交纳一定的保证金,从券商借入一定数量的资金买入证

信用卡逾期1000元会怎么样?信用卡每月都可以还最低还款吗?

信用卡逾期1000元会怎么样?1、信用卡逾期会导致高额罚息和违约金;2、信用受损;3、被各种手段催收骚扰;4、影响其他生活:成为失信人员,影响

新股国泰环保破发,跌超11%

4月4日上午,新股国泰环保破发,跌超11%,现成交额19亿元,换手率110%,市值362亿元。公司主营污泥处理服务,并向

信用卡逾期三年了但银行没有起诉还用还吗?信用卡逾期三年了银行会怎样处理?

信用卡逾期三年了但银行没有起诉还用还吗?信用卡逾期三年了,但银行没有起诉,不结清的话逾期记录会一直保留在征信中。欠了钱就必须要还,

焦点热文:昆钢炼钢厂一季度产钢142万吨迎来“开门红”

接下来,炼钢厂将以“优炼钢、炼优钢、炼钢优”为指引,聚焦“效率效能”双提升,扎实推进生产经营各项工作,为打造“最具价值创造力的金色炉

信用卡逾期一个月后果是什么?信用卡两个月没还款会有什么后果?

信用卡逾期一个月后果是什么?1、信用卡逾期一个月后,首先银行会收取违约金和罚息,其中罚息按万分之五的利率收取,违约金为未还足最低部分

信用卡逾期了每个月还一点可以吗?信用卡晚还一天算逾期吗?

信用卡逾期了每个月还一点可以吗?1、一般情况下,信用卡逾期了之后也是可以和银行协商分期每月还一点款的。2、但是前提是信用卡持卡人在逾

信用卡还不上会有什么后果?信用卡到期还不上可以延期还款吗?

信用卡还不上会有什么后果?1、高额利息和滞纳金信用卡不还款持卡人将不再享受信用卡免息期,将从消费当天开始计收每天万分之五的利息,按月

今日热讯:国网大连供电公司:电网改造客户供电两不误

2023年3月29日,在辽宁省大连普兰店市安波街道,一场集结了近300名作业人员的大型电网改造工程在紧锣密鼓中展开。12个小时里,国网大连供电公

时讯:大批候鸟飞抵鸭绿江口湿地

4月,一批批候鸟迁徙大军陆续飞抵位于丹东东港市境内的鸭绿江口湿地国家级自然保护区,在此补充食物、恢复体力。潮起潮落,众鸟逐浪翻飞,遮天

新消息丨沈阳五里河体育公园改扩建复工

“我们天天到这边锻炼,眼看着这个新建的足球场快完工了。”4月3日,张彧和球友来到了沈阳市五里河体育公园,提前体验即将竣工的笼式足球场。

天天热头条丨江苏盐城:万株郁金香花盛放 宛如“五彩丝带”绕田野[组图]

2023年4月2日,江苏盐城,大丰区新丰镇,荷兰花海3000多万株郁金香竞相绽放,五彩缤纷,蔚为壮观,吸引了大批游客。图片来源:视觉中国据了解

当前视点!马英九一行参观重庆市规划展览馆

4月3日,马英九一行参观重庆市规划展览馆。该馆通过平面展板、多媒体屏幕、互动平台、大小模型、复原场景等多种展陈形式,突出主城都市区沙盘

【世界热闻】盐城市公安局禁毒支队原支队长徐向东严重违纪违法被开除党籍和公职

日前,经盐城市委批准,盐城市纪委监委对盐城市公安局禁毒支队原支队长徐向东严重违纪违法问题进行了立案审查调查。徐向东严重违

医药行业重新回归创新驱动 政策演变倒逼企业加速转型

3月以来,A股上市公司2022年年报披露如火如荼。Choice数据显示,目前共有236家生物医药企业披露2022年年度业

冷空气又来搅局 降雨降温大风齐登场

度过了一个春暖花开的双休日,新的一周仍然在温暖的阳光中开启。然而,冷空气此时来搅局。受江淮气旋北上和高空槽的共同影响,周二、周三两天

当前消息!辽宁凌海:夫妻植树护林40年,荒山秃岭变绿洲“鹭岭”

新华社沈阳4月2日电(记者于力、丁非白)刺槐、榆树、松树、桑树,满山遍野露出春的气息;白鹭、苍鹭、夜鹭、池鹭,在湛蓝的天空自由翱翔。近日,

世界热头条丨从2023中国种子大会透视种业振兴新进展

新华社三亚4月3日电题:从2023中国种子大会透视种业振兴新进展新华社“新华视点”记者农业现代化,种子是基础。在海南三亚举行的2023中国种子

天天即时:首班陆海新通道跨境铁公联运班列成功开行

4月3日,陆海新通道跨境铁公联运班列(重庆—瑞丽—缅甸)首发班列在重庆江津小南垭铁路物流中心等候发车。当日,一列陆海新通道跨境铁公联运

天天快看点丨神舟十四号返回舱实物厦门首次展出

4月3日,福建厦门,民众在诚毅科技探索中心观看神舟十四号返回舱实物。日前,“两岸携行·共望星空”航天科普展在厦门开展,神舟十四号返回舱

世界快报:首个香港高中公民科学生内地考察团出发

香港公民与社会发展科学生内地考察首发团走进执信中学天河校区。 陈楚红摄新华社香港4月3日电(记者张雅诗)首个香港高中公民与社会发展科(

焦点热文:【乡村振兴在青海】民和:振兴乡村产业 共育“致富之花”

【乡村振兴在青海】民和:振兴乡村产业共育“致富之花”

今日热议:火影忍者晓成员阿飞_火影忍者晓成员

1、1:宇智波·斑代号:无【火之国-木叶、水之国-水影】木叶初代长老宇智波家族创始人2:佩恩(长门)--弥彦代号:零【雨之国-雨忍】自来也·弟子小南

世界新动态:沈阳多部门联动整治不文明祭祀行为

又是一年清明至,文明祭祀共此时。按照市委宣传部、市文明办清明节期间文明祭祀专项整治工作安排,从4月1日起至4月5日清明节当天,由市城管执

综合资讯

+更多

热点资讯

+更多
打板是涨停买还是快涨停买?打板为什么要在涨停瞬间买入?
打板是涨停买还是快涨停买?打板是在快涨停的时候买,买了之后坐等涨停,若是等到涨停再买,基本上是很难买进去的。打板一族在买入的时候, [详细]

Copyright @ 2008-2020  www.43710.com   All Right Reserved Powered by 财经情报网 版权所有

财经情报网   联系邮箱:562 66 29@qq.com

网站备案:沪ICP备2020036824号-12