`
CL315917525
  • 浏览: 232795 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java 内存映射文件 大文件操作

阅读更多
/**
 * 内存映射文件
 * @author Administrator
 *
 */
public class LargeMappedFiles {
	private static int length = 0x8FFFFFF;

	public static void main(String args[]) {
		try {
			MappedByteBuffer out = new RandomAccessFile(new File("D:\\Niotest.txt"), "rw")
					.getChannel()
					.map(FileChannel.MapMode.READ_WRITE, 0, length);
			for(int i = 0; i < length;i++){
				out.put((byte)'x');
			}
			System.out.println("Finished writing");
			for(int i = length/2;i<length/2+6;i++){
				System.out.println((char)out.get(i));
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

  

   内存映射文件上锁和部分内容上锁

  

  

/**
 * 文件映射 针对大文件
 * 大文件部分文件加锁
 * @author Administrator
 *
 */
public class LockingMappedFiles {
	static FileChannel fc;
	static final int LENGTH = 0x8FFFFFF;
	
	public static void main(String args[]){
		try {
			fc = new RandomAccessFile("D:\\test.dat","rw").getChannel();
			MappedByteBuffer out = fc.map(FileChannel.MapMode.READ_WRITE, 0, LENGTH);
			for(int i = 0 ;i < LENGTH ;i++){
				out.put((byte)'X');
			}
			new LockAndModify(out,0,0+LENGTH/3);
			new LockAndModify(out,LENGTH/2,LENGTH/2+LENGTH/4);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	private static class LockAndModify extends Thread{
		private ByteBuffer buff;
		private int start,end;
		
		LockAndModify(ByteBuffer mbb,int start,int end){
			this.start = start;
			this.end = end;
			mbb.limit(end);
			mbb.position(start);
			//创建新缓冲区
			buff = mbb.slice();
			start();
		}
		
		public void run(){
			try {
				FileLock fl = fc.lock(start, end, false);
				System.out.println("Locked : "+start+" to "+end);
				while(buff.position()<buff.limit()-1){
					buff.put((byte)(buff.get()+1));
				}
				fl.release();
				System.out.println("Release : "+start+" to "+end);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}
}

 

分享到:
评论

相关推荐

    内存映射文件

    内存映射文件是一种在操作系统中将文件与进程的虚拟地址空间直接关联的技术,极大地提高了程序对大文件的访问效率。这种技术广泛应用于各种操作系统,如Windows、Linux等。通过内存映射,文件的内容可以直接被加载到...

    java 利用内存映射读取文件后 按行进行输出

    java利用内存映射读取大文件。并且捉行输出。

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

    在Java NIO中,内存映射文件(MappedByteBuffer)是一个重要的特性,它允许将文件直接映射到内存中,以便于快速访问和修改文件内容。这一特性不仅提高了读写效率,而且还能用于进程间通信(IPC)。 内存映射文件的...

    STL文件的读取(普通文件解析与内存映射文件解析) cpp&stl

    比较这两种方法,内存映射文件解析通常在大文件处理中表现更好,因为它减少了I/O操作,提高了性能。然而,对于小文件,两者的差异可能不那么显著。在实际应用中,选择哪种方法取决于具体需求,如文件大小、内存限制...

    java 深入理解内存映射文件原理

    内存映射文件是Java和其他编程语言中的一种高效的数据访问机制,尤其在处理大文件和进行进程间通信时表现优越。本文将深入探讨内存映射文件的原理、与虚拟内存的区别和联系,以及它们的效率差异。 虚拟内存和内存...

    Java中用内存映射处理大文件的实现代码

    为了解决这个问题,Java提供了一种名为“内存映射文件”(Memory-Mapped File)的技术,它可以将文件直接映射到内存中,使得数据读写如同操作内存一样快速。本文将详细介绍如何在Java中使用内存映射文件,并通过示例...

    matlab开发-更好的内存映射文件位于TLAB中.zip

    在MATLAB开发中,内存映射文件(Memory-Mapped Files)是一种高效的数据处理技术,它允许程序员将大文件直接映射到进程的虚拟地址空间,从而可以像操作内存一样操作这些文件。这种技术尤其适用于处理大数据集,因为...

    Java内存映射 大文件轻松处理

    Java内存映射是一种高效处理大文件的技术,它允许程序通过虚拟内存系统直接访问文件内容,而无需通过传统的I/O操作。这种方式极大地提升了处理大文件的性能,因为内存映射文件通常利用操作系统级别的缓存机制,减少...

    【IT十八掌徐培成】Java基础第27天-01.MappedMemoryBuffer-文件内存映射缓冲区.zip

    6. **性能优化**:内存映射文件对于处理大文件特别有用,因为它减少了磁盘I/O操作。在处理大量数据时,这种方式通常比传统的流I/O更快。但是,如果文件非常大,可能会占用大量内存,因此需谨慎使用。 7. **内存映射...

    java nio 包读取超大数据文件

    内存映射文件是一种将文件内容直接映射到内存中的技术,使得对文件的操作如同操作内存一样简单高效。下面结合给定的部分代码片段,详细解释如何使用Java NIO读取超大数据文件: 1. **初始化配置** - **定义文件...

    java读取大文件

    通过这种方法,Java程序能够高效地处理大文件,避免一次性加载整个文件导致的内存问题,同时通过缓冲区和内存映射文件优化了读取性能。这种方法尤其适用于处理非常大的文件,如日志文件或大数据分析中的文件。

    Java中使用内存映射实现大文件上传实例

    2. **数据安全性**:由于内存映射文件与进程虚拟内存直接关联,程序崩溃可能会导致文件数据丢失。 3. **同步问题**:在多线程环境下,如果不加控制,可能会出现数据不一致的问题。 因此,在实际应用中,使用内存...

    Large-File-Processing-master_javanio_java大文件处理_

    3. **内存映射文件(Memory-Mapped Files)**:Java NIO提供了一个特殊的功能,即内存映射文件,它可以将文件直接映射到内存中,使得文件操作如同访问内存一样快速。对于大文件处理,内存映射文件是一种高效的策略,...

    java 解析xml类映射数据库 数据库操作 反射机制 源码

    本程序集的核心是利用Java解析XML文件,将XML中的数据映射到数据库,并通过反射机制进行数据库操作。下面将详细阐述这些知识点。 首先,XML解析在Java中通常有两种方式:DOM(Document Object Model)和SAX(Simple...

    JAVA解析DBC文件

    总结来说,用JAVA解析DBC文件涉及的关键技术包括文件I/O操作、字符串处理、数据类型转换以及对象建模。在处理过程中需关注数据的大小端问题,以确保解析的正确性。同时,解析后的数据可以用于多种汽车相关的软件开发...

    java大文件读取-乔乐共享

    在Java中,处理大文件主要有两种常用的方法:内存映射文件和分块读取。 ##### 2.1 内存映射文件 内存映射文件是一种特殊的文件处理方式,它能够将文件的一部分或者全部映射到内存地址空间中,从而允许程序像访问...

    java文件读写操作

    这个文件里面包含了java的IO流对文件的操作和java通道加内存映射对文件操作的源码

    xml与java对象映射

    Java工具如JAXB和XML Beans可以直接使用XSD文件生成Java类,从而实现对象到XML的严格映射。 总之,XML与Java对象的映射是Java开发中的重要环节,涉及多种技术和工具。开发者可以根据项目需求选择合适的工具,如JAXB...

Global site tag (gtag.js) - Google Analytics