Java NIO读书笔记 -- (一)初识 Java NIO

Java NIO 介绍

  1. NIO API 是对 1.3 版 I/O 特性的补充而非取代
  2. 新的 I/O 特性主要包含在 java.nio 软件包及其子包中,并被命 名为 New I/O(NIO)
  3. 主要用来提升 Java 应 用程序的 I/O 效率

Java NIO 的背景

Java 的劣势源于其最大的优势:一次编写,到处运行。Java 需要运行于虚拟机(即 JVM)之 上,为了保证 Java 字节码在各种 JVM 部署平台上运行效果一致,作些妥协是必须的.

虽然 Java 有一套完备的 I/O 类,但迄今 为止还只是针对通用特性,通常位于高端抽象层,横跨各种操作系统。这些 I/O 类主要面向流数 据,经常为了处理个别字节或字符,就要执行好几个对象层的方法调用。

传统Java I/O将不同的 I/O 对象组合到一起,提供了高度的灵活性,但需要处理 大量数据时,却可能对执行效率造成致命伤害。I/O 的终极目标是效率,而高效的 I/O 往往又无法 与对象形成一一对应的关系。高效的 I/O 往往意味着您要选择从 A 到 B 的最短路径,而执行大量 I/O 操作时,复杂性毁了执行效率。

当移动大量数据时,这些 I/O 类可 伸缩性不强,也没有提供当今大多数操作系统普遍具备的常用 I/O 功能,如文件锁定、非块 I/O、 就绪性选择和内存映射。这些特性对实现可伸缩性是至关重要的,对保持与非 Java 应用程序的正 常交互也可以说是必不可少的,尤其是在企业应用层面,而传统的 Java I/O 机制却没有模拟这些通用 I/O 服务。

Java 规范请求#51 (JSR 51, http://jcp.org/jsr/detail/51.jsp)包含了对高速、可伸缩 I/O 特性的详尽描述,借助这一特性,底层操作系统的 I/O 性能可以得到更好发挥, 这些促成了Java NIO的诞生。

随着 Merlin 的发布,操作系统强大的 I/O 特性终于可以借助 Java 提供的工具得到充分发挥。 论及 I/O 性能,Java 再也不逊于任何一款编程语言。

预备知识

1.缓冲区(Buffers)

新的Buffer类是常规Java类和通道之间的纽带。原始数据元素组成的固定长度数组,封装在包含状态信息的对象中,存入缓冲区。缓冲区提供了一个会合点:通道即可提取放在缓冲区中的数据, 也可以向缓冲区存入数据供读取。此外,还有一种特殊类型的缓冲区,用于内存映射文件。

2.通道(Channels)

NIO 新引入的最重要的抽象是通道的概念。Channel对象模拟了通道连接,通道既可以是单向的(进或出),也可以是双向的(进和出)。可以把通道想象成连接缓冲区和I/O服务的捷径。

3. 文件锁定和内存映射文件(File locking and memory-mapped files)

新的FileChannel类包含在java.nio.channels包内,提供了许多面向文件的新特性,其中最有趣的两个是文件锁定和内存映射文件。

在多个进程协同工作的情况下,要协调各个进程对共享数据的访问,文件锁定是必不可少的工 具。

将文件映射到内存,这样在您看来,磁盘上的文件数据就像是在内存中一样。这利用了操作系 统的虚拟内存功能,无需在内存中实际保留一份文件的拷贝,就可实现文件内容的动态高速缓存。

4. 套接字(Sockets)

套接字通道类为使用网络套接字实现交互提供了新方法。套接字通道可工作于非块模式,并可 与选择器一同使用。因此,多个套接字可实现多路传输,管理效率也比 java.net 提供的传统套 接字更高。

三个新套接字通道,即 ServerSocketChannel、SocketChannel 和 DatagramChannel。

5. 选择器(Selectors)

选择器可实现就绪性选择。 Selector 类提供了确定一或多个通道当前状态的机制。 使用选择 器,借助单一线程,就可对数量庞大的活动 I/O 通道实施监控和维护。

6. 字符集(Character sets)

java.nio.charsets 提供了新类用于处理字符与字节流之间的映射关系。您可以对字符转
换映射方式进行选择,也可以自己创建映射。

参考文献

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

推荐阅读更多精彩内容

  • 转自 http://www.ibm.com/developerworks/cn/education/java/j-...
    抓兔子的猫阅读 2,272评论 0 22
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,169评论 11 349
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • “诗人来到人间有一个很大的问题,就是诗人必须以最高的温度和速度燃烧自己,去照亮周围的人,然后把自己烧成灰烬。” ...
    Ptjianshu阅读 344评论 0 0