读书笔记-《Java NIO》:第二章 缓冲区(2)
2017-09-18 22:25
239 查看
今天接着看Java NIO第二章O(∩_∩)O~
1. 复制缓冲区
复制缓冲区,我们可以使用以下3个函数,以CharBuffer为例
Note:复制并非deep copy,可以理解为浅copy,复制的缓冲区和原来的缓冲区共用缓冲区的数据,原始缓冲区的改变会直接映射到copy的缓冲区,反之亦然;但各自有独立的position、limit、mark等。
1)duplicate()
创建一个新的Buffer对象,但并不copy数据,也就是浅复制;
2)asReadOnlyBuffer()
与duplicate的唯一区别就是,通过它创建的Buffer对象是只读的;
3)slice()
这个有意思,slice()得到的Buffer对象是以position为起点的剩余的缓冲区。
2. 字节缓冲区
我们知道操作系统和I/O设备操作的基本单位就是字节,字节缓冲区有必要再重新认识一下。
1)字节顺序
i>大端序
ii>小端序
Java NIO内部使用ByteOrder类封装了字节序。
Note:ByteBuffer不管硬件系统的字节序是什么,默认的字节序都是大端序;ByteBuffer的字节序可以通过调用order(ByteOrder bo)方法随时改变。
3. 直接缓冲区
要知道什么是直接缓冲区,我们得先知道什么是非直接缓冲区,回想一下第一章 焦点3:先复习下系统层面的I/O 那一小节。
这个就是非直接的缓冲区,每次I/O都需要用户空间和内核空间的两个缓冲区,而且数据基本都是重复的,具体的讲解,请参阅读书笔记-《Java
NIO》 : 第一章 简介
下面这个就是直接的缓冲区,用户空间和内核空间通过映射,共用一块缓冲区。
上一节我们讲到,通过allocate()和wrap()分配的缓冲区都是非直接的,那么通过什么分配的缓冲区是直接的呢?
答案:通过allocateDirect()分配的缓冲区就是直接的缓冲区;如果你想知道分配的缓冲区是不是直接的,可以通过调用isDirect()来判断
4. 视图缓冲区
可以等价理解为数据库的视图,视图可以有自己的position、limit、mark,但没有独立的数据,它和原来的缓冲区共享数据。
ByteBuffer允许创建视图将byte类型缓冲区映射为其它类型的缓冲区。
书中举了一个ByteBuffer映射为CharBuffer的例子,我们知道一个Char对应2个字节,映射关系如下:
5. 数据元素视图
ByteBuffer类为每一种原始数据类型提供了存取和转化方法。
第二章到这儿就讲完了,明天继续第三章(∩_∩)
1. 复制缓冲区
复制缓冲区,我们可以使用以下3个函数,以CharBuffer为例
Note:复制并非deep copy,可以理解为浅copy,复制的缓冲区和原来的缓冲区共用缓冲区的数据,原始缓冲区的改变会直接映射到copy的缓冲区,反之亦然;但各自有独立的position、limit、mark等。
1)duplicate()
创建一个新的Buffer对象,但并不copy数据,也就是浅复制;
2)asReadOnlyBuffer()
与duplicate的唯一区别就是,通过它创建的Buffer对象是只读的;
3)slice()
这个有意思,slice()得到的Buffer对象是以position为起点的剩余的缓冲区。
2. 字节缓冲区
我们知道操作系统和I/O设备操作的基本单位就是字节,字节缓冲区有必要再重新认识一下。
1)字节顺序
i>大端序
ii>小端序
Java NIO内部使用ByteOrder类封装了字节序。
Note:ByteBuffer不管硬件系统的字节序是什么,默认的字节序都是大端序;ByteBuffer的字节序可以通过调用order(ByteOrder bo)方法随时改变。
3. 直接缓冲区
要知道什么是直接缓冲区,我们得先知道什么是非直接缓冲区,回想一下第一章 焦点3:先复习下系统层面的I/O 那一小节。
这个就是非直接的缓冲区,每次I/O都需要用户空间和内核空间的两个缓冲区,而且数据基本都是重复的,具体的讲解,请参阅读书笔记-《Java
NIO》 : 第一章 简介
下面这个就是直接的缓冲区,用户空间和内核空间通过映射,共用一块缓冲区。
上一节我们讲到,通过allocate()和wrap()分配的缓冲区都是非直接的,那么通过什么分配的缓冲区是直接的呢?
答案:通过allocateDirect()分配的缓冲区就是直接的缓冲区;如果你想知道分配的缓冲区是不是直接的,可以通过调用isDirect()来判断
4. 视图缓冲区
可以等价理解为数据库的视图,视图可以有自己的position、limit、mark,但没有独立的数据,它和原来的缓冲区共享数据。
ByteBuffer允许创建视图将byte类型缓冲区映射为其它类型的缓冲区。
书中举了一个ByteBuffer映射为CharBuffer的例子,我们知道一个Char对应2个字节,映射关系如下:
5. 数据元素视图
ByteBuffer类为每一种原始数据类型提供了存取和转化方法。
第二章到这儿就讲完了,明天继续第三章(∩_∩)
相关文章推荐
- 读书笔记-《Java NIO》:第二章 缓冲区(1)
- 《Javascript编程精讲》读书笔记-第二章 函数
- Java NIO 缓冲区
- C++ primer plus 6th ed. 中文版读书笔记【第二章】
- Visual Basic .NET Power Coding 读书笔记之第二章 继承和接口
- 《深入理解linux内核》读书笔记 -- 第二章 内存寻址
- 《Hadoop Operations》读书笔记 - 1 - 第二章 HDFS
- Java NIO系列3:缓冲区
- 第二章 缓冲区(2)
- 第二章 缓冲区(8)
- [李景山php] 深入理解PHP内核[读书笔记]--第二章:用户代码执行--PHP脚本的执行 词法分析和语法分析
- 【读书笔记】iOS应用逆向工程-分析与实践(第二章)
- 第一行代码Android第二章读书笔记
- java nio 缓冲区(一)
- 【读书笔记】《深入浅出nodejs》第二章 模块机制
- 第二章 商品促销---策略模式(读书笔记)
- 读书笔记 - javascript 高级程序设计 - 第二章 在Html中使用JavaScript
- 《Systems Performance: Enterprise and the Cloud》读书笔记系列(二) —— 第二章(一)
- 『C程序设计』读书笔记系列文章之第二章 数据类型、运算符与表达式
- 《python基础教程 》第二章 读书笔记