`
Tonyguxu
  • 浏览: 271680 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【Java NIO】内存映射文件

 
阅读更多

java.nio包包含对下列特性的支持:

1.字符集编码器和解码器

2.非阻塞的I/O

3.内存映射文件

4.文件加锁机制

 

 

内存映射文件

 

file-mapping model

 

 

缓冲区数据结构——Buffer

 

 

在使用内存映射时,我们创建了单一的缓冲区横跨整个文件或部分文件区域。

类继承结构如下:

上面Buffer都没有提供构造,可以通过如下方法来获得Buffer实例:

static xxxBuffer allocate(int capacity)

 

Channel

Channel类似传统io里的流,但与流不同在于:

1.channel可以直接将指定文件的部分或者全部映射成Buffer

2.程序通过buffer读写channel中的数据。

比如想从channel中读取一些数据,首先会将这些数据读入buffer,然后程序再从buffer中读。写也一样要通过buffer往channel中写数据。

 

Channel的继承结构:

 

 

文件通道

 

打开Channel

XxxChannel = XxxInputStream / XxxOutputStream .getChannel()

 

FileChannel 常用方法

MapperByteBuffer map (FileChannel.MapMode mode, long position, long size);

将channel中部分or全部数据映射成buffer

 

通过Channel 和 Buffer从文件中读数据

FileInputStream input = new FileInputStream(fileName);
FileChannel channel = input.getChannel();

MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY/READ_WRITE/PRIVATE,
    long position, long size);//将文件的一个区域映射到内存中
buffer.get();//对buffer的读操作

 

通过Buffer 和 Channel向文件中写数据

FileOutputStream output = new FileOutputStream(fileName);
FileChannel channel = output.getChannel();

MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY/READ_WRITE/PRIVATE,
    long position, long size);//将文件的一个区域映射到内存中
buffer.put();//对buffer的写操作

 

FileChannel的内部类里定义了文件映射模式

public static class MapMode {

	/**
	 * Mode for a read-only mapping.
	 */
	public static final MapMode READ_ONLY
	    = new MapMode("READ_ONLY");

	/**
	 * Mode for a read/write mapping.
	 */
	public static final MapMode READ_WRITE
	    = new MapMode("READ_WRITE");

	/**
	 * Mode for a private (copy-on-write) mapping.
	 */
	public static final MapMode PRIVATE
	    = new MapMode("PRIVATE");

	private final String name;

	private MapMode(String name) {
	    this.name = name;
	}

	/**
	 * Returns a string describing this file-mapping mode.
	 *
	 * @return  A descriptive string
	 */
	public String toString() {
	    return name;
	}
    }

 

实例1:文件拷贝

 

 

实例2:文件追加内容

 

通道只能在字节缓冲区上操作

 

 

socket通道

 

 

 

分享到:
评论

相关推荐

    Java NIO 应用使用内存映射文件实现进程间通信

    Java NIO 应用 -- 使用内存映射文件实现进程间通信

    java nio中文版

    java NIO是 java New IO 的简称,在 jdk1.4 里提供的新 api 。...– 支持锁和内存映射文件的文件访问接口。 – 提供多路 (non-bloking) 非阻塞式的高伸缩性网络 I/O 。 本文档将围绕这几个特性进行学习和介绍。

    nio.rar_FastCopyFile.java_NIO_UseFloatBuffer.java_java nio_文件锁

    Java NIO 源码适合初学者,里面包括通道和Buffer的基本适用,以及文件锁,和内存文件映射等等

    尚硅谷Java视频_NIO 视频教程

    尚硅谷_NIO_通道的数据传输与内存映射文件 ·06. 尚硅谷_NIO_分散读取与聚集写入 ·07. 尚硅谷_NIO_字符集 Charset ·08. 尚硅谷_NIO_阻塞与非阻塞 ·09. 尚硅谷_NIO_阻塞式 ·10. 尚硅谷_NIO_非阻塞式 ·11. ...

    Java性能优化之使用NIO提升性能(Buffer和Channel)

    在软件系统中,由于IO的速度要比内存慢,因此,I/O读写在很多场合都会成为系统的瓶颈。提升I/O速度,对提升系统整体性能有着很大的好处。...支持锁和内存映射文件的文件访问接口;提供了基于Selector的异步网

    Java NIO与IO的差别和比较

    当中还提供了一个特殊类用于内存映射文件的I/O操作。  2. Charset:它提供Unicode字符串影射到字节序列以及逆影射的操作。  3. Channels:包括socket,file和pipe三种管道,它实际上是双向交流的通道。  

    nio:Clojure对java.nio的支持

    还定义了函数mmap来对文件进行内存映射。 此外,还有三个函数buffer-seq,buffer-nth和buffer-to-array,旨在使将java.nio类集成到Clojure中更加容易。 希望通过将它们的功能滚动到clojure.core中,它们将变得过时...

    文件快速加密

    但是,Java实现采用了多线程、NIO以及内存文件映射,其速度要远远超过Python版实现。 实测结果:加密大小为1G的文件,Java版耗时为3秒左右,而Python版则需要8分钟左右,而且还可能会出现内存溢出错误。 Java版本:...

    JAVA上百实例源码以及开源项目

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    JAVA上百实例源码以及开源项目源代码

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    javabitset源码-javaewah:JavaBitSet类的压缩替代品

    还支持内存映射文件:我们可以将位图序​​列化到磁盘,然后使用 java.nio 类将它们映射到内存。 这可以避免浪费的序列化/反序列化例程。 该库还提供了标准 BitSet 类的替代品。 与 JavaEWAH 中的其他位图类一样,这...

    java开源包4

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包101

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包11

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包6

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包9

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包8

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包5

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包10

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

    java开源包1

    ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...

Global site tag (gtag.js) - Google Analytics