#30天专注成长计划#day 17java并发多线程-NIO-Channel

实例实现

在代码中使用channel 通道,将本地的一个文件数据写入另一个文件当中,每次最多读取100个字节。

1.什么是NIO?

NIO 是New I/O 的简称,与旧式的基于流的I/O 方法相对,从名字看,他标示新的一套Java I/O 标准,它是在Java1.4中被纳入到JDK 中的,并具有以下特性:

1.NIO 是基于块(block) 的,它以块为基本单位处理数据,计算机硬盘上的存储单位也是基于块的,所以读写效率更高
2.为所有的原始类型提供缓存支持(buffer)
3.增加通道(channel) 对象,作为新的原始I/O 抽象
4.支持锁和内存映射文件的文件访问借口哦
5.提供了基于Selector 的异步网络I/O

2.缓存和内存的区别是什么?

网上的专业的讲解,但是今天我想通过隐喻来讲解自己所理解的他们之间的区别,说的不对的地方请拍砖。

专业解释

缓存是集成于CPU当中,作为CPU运算的存储支撑。由于CPU芯片面积和成本的因素来考虑,缓存都很小。现在一般的缓存不过几M。CPU内缓存的运行频率极高,一般是和处理器同频运作,工作效率远远大于系统内存和硬盘。实际工作时,CPU往往需要重复读取同样的数据块,而缓存容量的增大,可以大幅度提升CPU内部读取数据的命中率,而不用再到内存或者硬盘上寻找,以此提高系统性能。
内存则是作为CPU与硬盘间的存储支撑。插在主板的内存槽中。现在内存一般为1~2G。即1G=1024M
它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。 内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。

隐喻

我想用江河湖泊的水,1000ml杯中的水,口中的水,身体需要。来做比喻
将入我们的身体需要喝水,怎么样最快喝到水呢。肯定是口里面有大量的水,我们直接咽下去就可以了。但是事实是我们口里面能装的水是有限的,需要从被子里面取。
在这里我我把杯中的水比作内存,口里的水比作缓存。江河湖泊里面的水比作硬盘。

3.什么是Channel ,有什么特点?

Channel类似于传统的流对象,但与传统的流对象有两个主要区别:

1、Channel可以直接将指定文件的部分或全部直接映射成Buffer。
2、程序不能直接访问Channel中的数据,包括读、写入都不行,Channel只能与Buffer进行交互。也就是说,如果要从Channel中取得数据,必须先用Buffer从Channel中取出一些数据,然后让程序从Buffer中取出这些数据;如果要将程序中的数据写入Channel,一样先让程序将谁放入Buffer中,程序再将Buffer里的数据写入Channel中,模型图如下:

Paste_Image.png

4.JDK channel 接口与类图

a3b2f3dd-8113-43d6-87ee-26d300ad5db1.png

5.JDK Buffer 抽象类与子类结构图

9eb0a493-2ded-4f85-ad01-d4365c0fd8c0.png

6.实现实例的代码(介绍完了,应该实践一下)

ceb8b173-b877-43b6-acb1-854233cf7b16.png

代码注意:

bb.flip();一定得有,如果没有,就是从文件最后开始读取的,当然读出来的都是byte=0时候的字符。通过bb.flip();这个语句,就能把buffer的当前位置更改为buffer缓冲区的第一个位置

测试结果如下

ee5c124a-8b2f-4b19-a9fe-49b05ad1ec69.png

6.增加一点气氛

201591620492481261.gif
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容