`
12616383
  • 浏览: 51273 次
  • 性别: Icon_minigender_1
  • 来自: 待定
社区版块
存档分类
最新评论

java_croe 学习笔记之新IO---java.nio 之内存映射文件

阅读更多

解释:将文件的一段区域映射到内存中,比传统的文件处理速度要快很多

 

参考:

无格式输入流 110秒

缓冲输入流     9.9秒

随机存取文件  162秒

内存映射文件   7.2秒

 

例子

package twelve;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.util.zip.CRC32;

/**
  @Title NIOTTest.java
  @description  TODO
  @author qinpeng
  @date Aug 25, 2009 10:23:26 PM
 */
public class NIOTTest {
	
	public static void main(String[] args) {
		
		String fileName = "d:\\IOTest.pdf";
		
		System.out.println("inputStream");
		long start = System.currentTimeMillis();
		long crcValue = checksumInputStreanm(fileName);
		long end = System.currentTimeMillis();
		System.out.println(Long.toHexString(crcValue));
		System.out.println((end - start)+"耗时");
		
		System.out.println("BufferedinputStream");
		start = System.currentTimeMillis();
	    crcValue = checksumInputStreanm(fileName);
	    end = System.currentTimeMillis();
		System.out.println(Long.toHexString(crcValue));
		System.out.println((end - start)+"耗时");
		
		System.out.println("RandomAccessFileinputStream");
		start = System.currentTimeMillis();
		crcValue = checksumInputStreanm(fileName);
		end = System.currentTimeMillis();
		System.out.println(Long.toHexString(crcValue));
		System.out.println((end - start)+"耗时");
		
		System.out.println(" MappedFile inputStream");
		start = System.currentTimeMillis();
		crcValue = checksumInputStreanm(fileName);
		end = System.currentTimeMillis();
		System.out.println(Long.toHexString(crcValue));
		System.out.println((end - start)+"耗时");
	}
	
	
	
	public static long checksumInputStreanm(String fileName){
		CRC32 crc = new CRC32();
		try {
			InputStream in = new FileInputStream(fileName);
			int c;
			while((c=in.read())!=-1){
				crc.update(c);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			System.err.print("NIOTTest--checksumInputStreanm--new FileInputStream is not found");
		} catch(IOException ioe){
			ioe.printStackTrace();
			System.err.print("NIOTTest--checksumInputStreanm--new FileInputStream'read append IOException");
		}
		return crc.getValue();
	}
	
	public static long checksumBufferedInputStream(String fileName){
		CRC32 crc = new CRC32();
		try {
			InputStream in = new BufferedInputStream(new FileInputStream(fileName));
			int c;
			while((c=in.read())!=-1){
				crc.update(c);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			System.err.print("NIOTTest--checksumBufferedInputStream--new FileInputStream is not found");
		} catch(IOException ioe){
			ioe.printStackTrace();
			System.err.print("NIOTTest--checksumBufferedInputStream--new FileInputStream'read append IOException");
		}
		return crc.getValue();
	}
	
	
	public static long checksumRondomAccessFileInputStream(String fileName){
		CRC32 crc = new CRC32();
		try {
			RandomAccessFile file = new RandomAccessFile(fileName,"r");
			int c;
			while((c=file.read())!=-1){
				crc.update(c);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			System.err.print("NIOTTest--checksumRondomAccessFileInputStream--new FileInputStream is not found");
		} catch(IOException ioe){
			ioe.printStackTrace();
			System.err.print("NIOTTest--checksumRondomAccessFileInputStream--new FileInputStream'read append IOException");
		}
		return crc.getValue();
	}

	public static long checksumMappedFile(String fileName){
		CRC32 crc = new CRC32();
		try {
			FileInputStream in = new FileInputStream(fileName);
			FileChannel channel = in.getChannel();
			int length = (int) channel.size();
			MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, length);
			
			for(int p = 0;p<length;p++){
				int c = buffer.getInt(p);
				crc.update(c);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			System.err.print("NIOTTest--checksumRondomAccessFileInputStream--new FileInputStream is not found");
		} catch(IOException ioe){
			ioe.printStackTrace();
			System.err.print("NIOTTest--checksumRondomAccessFileInputStream--new FileInputStream'read append IOException");
		}
		return crc.getValue();
	}
	
	
}

 

1
0
分享到:
评论
4 楼 12616383 2012-02-18  
谢谢3楼的提醒。。以后要认真起来,嘿嘿
3 楼 kuaiyuelaogong 2011-03-03  
楼主的代码只是拷贝的,呵呵,调用的都是第一个方法,楼下的想测试需要将调用的方法修改一下,不能只简单的看看,楼主也不够细心的,呵呵
2 楼 fabulous 2010-09-01  
inputStream
35169c9e
672耗时
BufferedinputStream
35169c9e
672耗时
RandomAccessFileinputStream
35169c9e
656耗时
MappedFile inputStream
35169c9e
657耗时
1 楼 xinyu126 2009-12-29  
inputStream
9581cb7c
6375耗时
BufferedinputStream
9581cb7c
6360耗时
RandomAccessFileinputStream
9581cb7c
6406耗时
MappedFile inputStream
9581cb7c
6391耗时

inputStream
e9e2d308
46062耗时
BufferedinputStream
e9e2d308
46360耗时
RandomAccessFileinputStream
e9e2d308
46562耗时
MappedFile inputStream
e9e2d308
46188耗时

相关推荐

    2019-12-23_DICore(006WEB动态实例UnitOfWork-Dispose,内存监视生命周期).rar

    本资源"2019-12-23_DICore(006WEB动态实例UnitOfWork-Dispose,内存监视生命周期).rar"详细介绍了如何在.NET Core中使用默认依赖注入容器,并探讨了UnitOfWork模式以及对象生命周期的管理。 首先,让我们深入理解...

    Java croe java 思想

    《Java核心编程思想》是Java开发者的一本经典之作,它深入浅出地讲解了Java语言的核心概念和技术,旨在提升读者的编程思维和实战能力。这本书的内容涵盖了Java的基础语法、面向对象设计、异常处理、集合框架、多线程...

    Creo3.0配置文件-2014A版-精诚网

    研究PTC Creo® 3.0 Parametric 配置选项configoptions.pdf,再次整理一下自己正在使用的配置选项Config.pro、绘图选项Iso.dtl、系统颜色Syscol.scl以及软件界面配置文件Creo_Parametric_Customization.ui.

    creo系统颜色

    8. 野火论坛 - Pro-E 学习交流第一站.url:这是一个链接,指向一个专门讨论Creo(前称Pro/Engineer,简称Pro-E)的论坛,用户可以在那里交流学习心得,获取更多关于Creo颜色主题和其他功能的信息。 总的来说,这些....

    PTC.Creo.3.0.M190-SSQ.torrent

    PTC creo3.0 M190安装包,给需要的人提供帮助。Creo是美国PTC公司于2010年10月推出CAD设计软件包。

    creo3.0-config.pro配置文件详解

    ### Creo3.0-config.pro配置文件详解 #### 概述 `config.pro`配置文件是PTC Creo Parametric中的一个核心配置文件,它控制着Creo Parametric的多种功能和行为。通过编辑`config.pro`文件,用户可以根据自身需求...

    creo3.0配置文件详细设置

    在三维建模软件Creo 3.0中,配置文件(.prf文件)是控制程序行为和用户界面的关键元素。这些文件允许用户根据个人习惯和项目需求定制软件的各个方面,包括显示设置、单位系统、内存分配、启动选项等。本篇文章将详细...

    CREO2.0配置文件.zip

    CREO2.0适用的配置文件2012A版,符合国家标准。可以直接使用,配置选项Config.pro、绘图选项Iso.dtl、系统颜色Syscol.scl以及软件界面配置文件Creo_Parametric_Customization.ui.

    CREO配置文件.rar

    按国标定制的creo配置文件

    creo配置文件

    Creo配置文件(config.pro)是Creo的核心配置文件,它允许用户根据个人喜好和工作需求定制软件的行为,包括界面布局、操作习惯、系统性能优化等关键设置。 配置文件`config.pro`在Creo中的作用至关重要,因为它...

    purge.exe 用于Creo每次保存文件会出现重复文件没替换,双击此程序会自动帮你清除重复文件,放在保存该文件同一个目录里

    仅用于Creo软件。Creo每次保存不会替换源文件,这个可以自己在软件设置的,不用我的这purge.exe程序,不会软件设置操作或设置的不成功的需要的人使用。

    DUMP_C++_dump_

    Dump文件包含了程序崩溃时的内存状态,包括堆栈信息、进程内存映射以及变量值等,这为分析异常提供了宝贵的上下文信息。 生成dump文件通常需要以下步骤: 1. 使用调试库:Windows平台下,可以使用...

    hibernate aip hibernate aip

    Hibernate作为一款强大的对象关系映射(ORM)工具,极大地简化了Java应用程序与数据库之间的交互。在这个过程中,我们将深入探讨Hibernate的核心概念、工作原理以及如何在实际项目中有效地运用Hibernate AIP。 首先...

    PTC_Creo_3.0_M040_Win64破解文件

    PTC_Creo_3.0_M040_Win64破解文件

    求CROE2E6300+MSI945PNEO3的超频方案

    在探讨CROE2E6300处理器与MSI 945P NEO3主板的超频方案之前,我们首先要理解几个关键概念和技术限制。E6300是一款基于Intel Core微架构的CPU,拥有良好的超频潜力,而945P NEO3主板则是基于Intel 945P芯片组设计,它...

    69M2V1.zip

    "69M2V1.zip" 是一个压缩文件,其中包含了一个或多个与"CROE"相关的文件。CROE通常指的是"Computational Risk and Optimization Engine",这是一个在金融、工程和其他领域中用于处理复杂风险分析和优化问题的计算...

    2019-12-22_DICore(005WEB动态实例UnitOfWork,内存监视生命周期).rar

    通过学习这个教程,开发者能够深入理解如何在.NET Core项目中使用DI来实现UnitOfWork模式,以及如何有效地管理服务生命周期,同时关注性能和内存效率。通过实践这些知识,可以构建更健壮、可扩展且易于维护的Web应用...

    Creo系统颜色自定义

    在压缩包文件“Creo自定义背景方案”中,可能包含了作者或者社区成员分享的一些个性化颜色配置,你可以尝试导入这些文件,看看是否符合你的工作风格。 值得注意的是,颜色设置对于某些特定任务可能会有影响。比如,...

    自动编码识别 BOM

    自动编码识别(BOM)在IT领域中是一项至关重要的技术,尤其是在处理文本文件时。BOM,全称Byte Order Mark,是一种特殊的Unicode字符,用于标识文件的编码格式。熊猫看书作为一款阅读软件,能自动识别包括GBK、UTF8...

Global site tag (gtag.js) - Google Analytics