一、Buffer类

  java.nio.Buffer这个类是用来干什么的?有怎样的结构?

  "Core Java"中是这样定义的“A buffer is array of values of the same type”。所以,我们可以感性的认识到:buffer就像数组一样,存放的是相同类型的数据。还有一个重要的事情就是:Buffer是一种随机存储类型的数据结构,就像普通数组一样(用下标的方式)能够用索引号定位到buffer中的任何一个位置的数据上)。

  Buffer类是一个抽象类,其子类有(注意:StringBuffer类和这里的buffer没有什么联系):

aaarticlea/png;base64,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" alt="" />

Buffer类中的属性和方法用于管理和控制buffer的状态,其子类则有get或put方法用于“读出”或“写入”不同类型的数据;我们还应该注意到:ByteBuffer、CharBuffer等依然是一个抽象类。所以,我们是不能够通过new的方式得到一个ByteBuffer或CharBuffer。现在,万一我们想得到一个CharBuffer怎么办呢(ByteBuffer可以用同样的方式得到)?

答案:可以利用CharBuffer的allocate(int capacity)方法,或者是对现有的char[] array进行包装的wrap方法,如下:

aaarticlea/png;base64,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" alt="" />

在我们实际的编程中使用最多的是ByteBuffer和CharBuffer,如下图所示,Buffer具有以下4个属性:

aaarticlea/png;base64,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" alt="" />

①、capacity,一个Buffer建立以后,它就固定不变了;

②、position,它指示了下一个要读或写数据的位置;

③、limit,超过limit位置的数据是没有意义的;

④、mark,它标记某个重要的位置,用于后面能够返回到该位置进行重新读或写;

它们四个的关系是:

0≤mark≤position≤limit≤capacity

Buffer最重要的一个作用就是:循环的用于“先写,后读”。下面是一个先写后读的过程:

①、最开始的时候,position=0 && limit=capacity;

②、调用put方法向buffer中写数据,当数据写完了或者是position到达了capacity的位置,下面就开始从buffer中读取数据;

③、从“写”状态向“读”状态转变,需要调用flip方法。其作用就是:先让limit等于当前的position,然后将position设置为0;

④、读取数据的时候,只要remaining方法(limit-position)返回一个正数,那么我们就可以持续的调用get方法从buffer中读取数据;

⑤、当读取数据过程完毕了,我们可以调用clear方法,将buffer从“读”状态转换为“写”状态,进入下一个“先读,后写”循环;

⑥、clear方法时设置position=0 && limit=capacity;

⑦、如果想重新读取buffer,可以调用其rewind或者是mark/reset方法,API中有详细介绍;

API:java.nio.Buffer

①、Buffer clear()

设置buffer进入到写状态,设置position=0 && limit=capacity;

②、Buffer flip()

设置buffer进入到读状态,设置limit等于当前的position && position=0;

③、Buffer rewind()  //rewind可以翻译为“倒回”,“倒带”等

准备重新读取buffer中相同的数据,设置position=0 && limit保持不变;

④、Buffer mark()

将当前的position设置为mark,其可以配合reset()方法实现buffer的重读/写;

⑤、Buffer reset()

设置position=mark,从而可以从mark位置重新开始读或写;

⑥、int remaining()

返回buffer中“可读”数据的个数,或者是还可以“写入”多少个新的数据,返回limit-position;

⑦、int position()   返回当前position的值;

⑧、int capacity()   返回buffer的capacity的值;

二、nio的文件映射

下面我们看java.nio包相对于旧的IO而言有哪些增强的新特性:

nio主要是支持一下四个增强的特性:

①、字符集的编码和解码;

②、非阻塞IO(nonblocking I/O);

③、Memmory-mapped files;

④、文件锁;

  对字符集的编码和解码可以单独拿出来讲。非阻塞IO主要用在网络通信中。文件锁是一个复杂却不怎么靠得住的东西(依赖于具体操作系统对锁的支持),在并发的情况下,通常可以借助于数据库的锁机制,将文件存入数据库中即可实现文件的同步。

  这里主要总结Memmory-mapped files。

  大多数操作系统可以利用虚拟内存(virtual memory)的优势,将整个文件或者是文件的一部分映射到内存中。然后,我们就可以像内存数组一样访问映射文件了(主要是其随机访问特性),这样会比传统的文件操作(RandomAccessFile)要快很多。

  【讨论:对文件的操作有大体的三种方式File流、RandomAccessFile、Memmory-mapped files,但是各有特色:①文件流和缓冲流结合起来会很快,但是不具有随机访问特性;②、RandomAccessFile有随机访问特性,但是它效率十分低下;③、Memmory-mapped files具有随机访问特性,其效率甚至要比缓冲流还高,它主要是用于对“大文件”的操作上】

  文件的映射操作比较简单,依据下面的步骤即可:

  ①、从文件中获取到一个channel。其中channel是磁盘文件的一个抽象,通过它能够获取到操作系统的一些特性,比如:内存映射、文件锁、文件间的快速数据传递。在jak1.4中已经重写了FileInputStream、FileOutputStream和RandomAccessFile类,为它们添加了getChannel方法。所以,我们可以通过调用getChannel方法获取到磁盘文件的channel。如下:

FileInputStream in = new FileInputStream(...);
FileChannel channel = in.getChannel();

  ②、从channel中获取到MappedByteBuffer。我们可以通过调用Channel类的map方法进行文件的映射,此方法会返回一个MappedByteBuffer对象。在map方法中我们可以指定文件映射的范围(全部或者是部分),还可以指定映射的模式,共支持三种模式:

  ----FileChannel.MapMode.READ_ONLY:只能从buffer中读取数据,不能像buffer中写入数据。当调用写方法的时候会抛出一个ReadOnlyBufferException异常。

  ----FileChannel.MapMode.READ_WRITE:buffer是可写的,同时buffer中改变的数据会在某个时候写回到文件中。注意,其它也映射了该文件的程序并不能马上感知到这一改变(所以,有了文件同步锁机制)。

  ----FileChannel.MapMode.PRIVATE:buffer是可写的,但是任何改变都不会写回到文件中去。

  ③、一旦我们得到了一个buffer,那么我们就可以调用Buffer或者是其子类的方法对buffer进行数据的访问。注意,Buffer同时支持顺序访问和随机访问两种方式。比如,下面的两个例子:

//使用顺序访问buffer
while(buffer.hasRemaining()){
byte b = buffer.get();
...
} //使用随机访问buffer
for(int i = 0; i < buffer.limit(); i++){
byte b = buffer.get(i);   //Buffer这个抽象类没有get和put方法,它只负责管理和控制buffer的状态
...
}

buffer.order(ByteOrder.LITTLE_ENDIAN);  指定小端存储

ByteOrder b = buffer.order();   找出当前buffer中存放byte的模式

下面的一个例子中,分别使用了FileInputStream,BufferedInputStream,RandomAccessFile和MappedFile来读取rt.jar文件(59.8MB),并计算器CRC32值。我们可以对比四种处理方式的效率,得到一个感性的认识:

package nio;

import java.io.*;
import java.nio.*;
import java.nio.channels.FileChannel;
import java.util.Scanner;
import java.util.zip.CRC32; public class NIOtest { public static long checksumInputStream(String filename) throws Exception{ CRC32 crc32;
InputStream in = null;
try {
crc32 = new CRC32();
in = new FileInputStream(filename); int c;
while((c = in.read()) != -1){
crc32.update(c);
}
} finally{
if(in != null)
in.close();
} return crc32.getValue();
} public static long checksumBufferedInputStream(String filename) throws Exception{ CRC32 crc32 = new CRC32();
InputStream in = null;
try {
in = new BufferedInputStream(new FileInputStream(filename));
int b;
while((b = in.read()) != -1){
crc32.update(b);
}
} finally{
if(in != null)
in.close();
} return crc32.getValue();
} public static long checksumRandomAccessFile(String filename) throws Exception{ RandomAccessFile file = null;
CRC32 crc = new CRC32();
try {
file = new RandomAccessFile(filename, "r");//只读模式
long length = file.length();
for(int i = 0; i < length; i++){
file.seek(i);
int b = file.read();
crc.update(b);
}
} finally{
if(file != null)
file.close();
} return crc.getValue();
} public static long checksumMappedFile(String filename) throws Exception{ CRC32 crc = new CRC32();
FileInputStream in = null;
FileChannel channel = null;
try {
in = new FileInputStream(filename);
channel = in.getChannel();
int size = (int) channel.size();
MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, size);
for(int p = 0; p < size; p++){
int b = buffer.get(p);
crc.update(b);
}
} finally{
if(in != null)
in.close();
} return crc.getValue();
} public static void main(String[] args) throws Exception {
System.out.println("输入测试文件路径:");
InputStream in = System.in;
Scanner scanner = new Scanner(in);
String filename = scanner.nextLine();
System.out.println("开始计算...");
System.out.println(); long start = System.currentTimeMillis();
long crcValue = checksumInputStream(filename);
long end = System.currentTimeMillis();
System.out.println("---InputStream----> " + (end - start ) + " 毫秒。 crc32 值: " + Long.toHexString(crcValue)); start = System.currentTimeMillis();
crcValue = checksumBufferedInputStream(filename);
end = System.currentTimeMillis();
System.out.println("---BufferedInputStream----> " + (end - start ) + " 毫秒。 crc32 值: " + Long.toHexString(crcValue)); start = System.currentTimeMillis();
crcValue = checksumRandomAccessFile(filename);
end = System.currentTimeMillis();
System.out.println("---RandomAccessFile----> " + (end - start ) + " 毫秒。 crc32 值: " + Long.toHexString(crcValue)); start = System.currentTimeMillis();
crcValue = checksumMappedFile(filename);
end = System.currentTimeMillis();
System.out.println("---MappedFile----> " + (end - start ) + " 毫秒。 crc32 值: " + Long.toHexString(crcValue)); if(scanner != null)
scanner.close();
} }

执行结果:

输入测试文件路径:
E:\Java\jdk1.8.0_25\jre\lib\rt.jar
开始计算... ---InputStream----> 222721 毫秒。 crc32 值: 2a57ac2
---BufferedInputStream----> 3020 毫秒。 crc32 值: 2a57ac2
---RandomAccessFile----> 377263 毫秒。 crc32 值: 2a57ac2
---MappedFile----> 4323 毫秒。 crc32 值: 2a57ac2

三、关于FileChannel

这个类,也是一个抽象类。

aaarticlea/png;base64,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" alt="" />

  它有基于byte的读写方法。不过,都是基于ByteBuffer对象的,和Channel直接进行通信的Buffer类型只有ByteBuffer类型。从而,我么可以看出,Channel是一个非常底层的类,更确切的说这样做时为了让大多数的操作系统都能支持这种有效的文件映射。

aaarticlea/png;base64,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" alt="" />

aaarticlea/png;base64,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" alt="" />

  所以,凡是想通过FileChannel读写数据到文件中,必须要通过ByteBuffer或者是ByteBuffer[]。我们知道,ByteBuffer也同样是一个抽象类,是不可以通过new方法获得的。在ByteBuffer类中为我们提供了静态的方法:loacate(int capacity)和wrap方法。通过这些静态方法可以获得一个ByteBuffer对象。像下面这样通过Channel来对文件进行读写操作:

package nio;

import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel; public class ChannelTest { public static void main(String[] args) throws Exception { //通过Channel写文件
FileChannel fc = new FileOutputStream("data.txt").getChannel();
fc.write(ByteBuffer.wrap("Some text".getBytes()));
fc.close(); //将内容添加到文件的末尾
fc = new RandomAccessFile("data.txt", "rw").getChannel();
fc.position(fc.size()); //跳到文件的末尾
fc.write(ByteBuffer.wrap(" Some more".getBytes()));
fc.close(); //通过Channel读取文件
fc = new FileInputStream("data.txt").getChannel();
ByteBuffer buffer = ByteBuffer.allocate((int) fc.size());
fc.read(buffer); //从channel中读取数据到buffer中
buffer.flip(); //准备从buffer中读取数据给我们自己用
while(buffer.remaining() > 0){
System.out.print((char)buffer.get());
}
fc.close();
} }

Buffer数据结构和new IO的Memory-mapped files的更多相关文章

  1. vertex buffer 数据结构 如何读vb的memory pool

    vertex attribute (declaration)    vertex stream (memory pool) 这两部分 通过attribute 里面对memory的描述把两部分 vbo ...

  2. C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转

    原文:C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing ...

  3. C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 VC中进程与进程之间共享内存 .net环境下跨进程、高频率读写数据 使用C#开发Android应用之WebApp 分布式事务之消息补偿解决方案

    C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped 转 节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing). ...

  4. 虚拟内存(VirtualAlloc),堆(HeapAlloc/malloc/new)和Memory Mapped File

    http://blog.csdn.net/zj510/article/details/39400087 内存管理有三种方式: 1. 虚拟内存,VirtualAlloc之类的函数 2. 堆,Heapxx ...

  5. redis启动报错:The Windows version of Redis allocates a memory mapped heap for sharing with

    windows系统下通过cmd命令:redis-server.exe redis.windows.conf 启动redis报错,控制台报错如下: The Windows version of Redi ...

  6. 工作于内存和文件之间的页缓存, Page Cache, the Affair Between Memory and Files

    原文作者:Gustavo Duarte 原文地址:http://duartes.org/gustavo/blog/post/what-your-computer-does-while-you-wait ...

  7. Page Cache, the Affair Between Memory and Files.页面缓存-内存与文件的那些事

    原文标题:Page Cache, the Affair Between Memory and Files 原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限 ...

  8. C# .Net 多进程同步 通信 共享内存 内存映射文件 Memory Mapped

    节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing). 内存映射文件对于托管世界的开发人员来说似乎很陌生,但它确实已经是很远古的技术了,而且在操作 ...

  9. [Node.js] 03 - Buffer, Stream and File IO

    fs 模块,视频教学 os 模块,视频教学,api doc Buffer类 创建 Buffer 类 // 创建一个长度为 10.且用 0 填充的 Buffer. const buf1 = Buffer ...

随机推荐

  1. roscpp源码阅读

    roscpp doxgen 这只是我摘取的一些主要代码 node_handle.cpp //NodeHandle的构造函数 void NodeHandle::construct(const std:: ...

  2. 定位表的数据块并且dump出来

    SQL> select * from city;         ID NAME ---------- ----------          7 Chicago          6 Jers ...

  3. COCOS2DX2.2.2 创建CCEditBox输入框架实现文本及密码输入

    本文转载于: http://5.quanpao.com/?p=561 使用CCEditBox需要启用扩展库既extension ,因此需要引入这个空间名 有两种方法, using namespace ...

  4. WPF 多线程处理(1)

    WPF 多线程处理(1) WPF 多线程处理(2) WPF 多线程处理(3) WPF 多线程处理(4) WPF 多线程处理(5) WPF 多线程处理(6) 废话不多说,先上图: 多线程处理数据后在th ...

  5. WPF简单布局 浅尝辄止

            WPF的窗口只能包含一个元素,为了在WPF窗口中放置多个元素并创建更实用的用户界面,需要在窗口上放置一个容器,然后在容器中放置其它元素. 注意:造成这一限制的原因是window类继承自 ...

  6. android button 字母自动大写

    <Button android:id="@+id/btnStart" android:layout_width="wrap_content" androi ...

  7. SQLServer 语句-创建索引【转】

    语法:CREATE [索引类型] INDEX 索引名称ON 表名(列名)WITH FILLFACTOR = 填充因子值0~100GO /*实例*/USE 库名GOIF EXISTS (SELECT * ...

  8. C# 获取属性字段上DescriptionAttribute的值

    var ent = new Ent(); foreach (var item in ent.GetType().GetProperties()) { var v = (DescriptionAttri ...

  9. centos6.5安装vmware-tools

    一.问题描述 为什么使用vmware-tools:传文件方便,可以从主机中直接拖拽文件到centos中(但实际上我们可以用:WinSCP):鼠标切换方便,鼠标指到什么地方,表名当前正在操作哪个环境(但 ...

  10. spoj 138

    离散化  去掉重复点 排序  二分查找 #include<cstdio> #include<cstring> #include<algorithm> #define ...