解释:将文件的一段区域映射到内存中,比传统的文件处理速度要快很多
参考:
无格式输入流 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();
}
}
分享到:
相关推荐
本资源"2019-12-23_DICore(006WEB动态实例UnitOfWork-Dispose,内存监视生命周期).rar"详细介绍了如何在.NET Core中使用默认依赖注入容器,并探讨了UnitOfWork模式以及对象生命周期的管理。 首先,让我们深入理解...
《Java核心编程思想》是Java开发者的一本经典之作,它深入浅出地讲解了Java语言的核心概念和技术,旨在提升读者的编程思维和实战能力。这本书的内容涵盖了Java的基础语法、面向对象设计、异常处理、集合框架、多线程...
### Creo3.0-config.pro配置文件详解 #### 概述 `config.pro`配置文件是PTC Creo Parametric中的一个核心配置文件,它控制着Creo Parametric的多种功能和行为。通过编辑`config.pro`文件,用户可以根据自身需求...
8. 野火论坛 - Pro-E 学习交流第一站.url:这是一个链接,指向一个专门讨论Creo(前称Pro/Engineer,简称Pro-E)的论坛,用户可以在那里交流学习心得,获取更多关于Creo颜色主题和其他功能的信息。 总的来说,这些....
研究PTC Creo® 3.0 Parametric 配置选项configoptions.pdf,再次整理一下自己正在使用的配置选项Config.pro、绘图选项Iso.dtl、系统颜色Syscol.scl以及软件界面配置文件Creo_Parametric_Customization.ui.
在三维建模软件Creo 3.0中,配置文件(.prf文件)是控制程序行为和用户界面的关键元素。这些文件允许用户根据个人习惯和项目需求定制软件的各个方面,包括显示设置、单位系统、内存分配、启动选项等。本篇文章将详细...
CREO2.0适用的配置文件2012A版,符合国家标准。可以直接使用,配置选项Config.pro、绘图选项Iso.dtl、系统颜色Syscol.scl以及软件界面配置文件Creo_Parametric_Customization.ui.
按国标定制的creo配置文件
Creo配置文件(config.pro)是Creo的核心配置文件,它允许用户根据个人喜好和工作需求定制软件的行为,包括界面布局、操作习惯、系统性能优化等关键设置。 配置文件`config.pro`在Creo中的作用至关重要,因为它...
仅用于Creo软件。Creo每次保存不会替换源文件,这个可以自己在软件设置的,不用我的这purge.exe程序,不会软件设置操作或设置的不成功的需要的人使用。
Dump文件包含了程序崩溃时的内存状态,包括堆栈信息、进程内存映射以及变量值等,这为分析异常提供了宝贵的上下文信息。 生成dump文件通常需要以下步骤: 1. 使用调试库:Windows平台下,可以使用...
Hibernate作为一款强大的对象关系映射(ORM)工具,极大地简化了Java应用程序与数据库之间的交互。在这个过程中,我们将深入探讨Hibernate的核心概念、工作原理以及如何在实际项目中有效地运用Hibernate AIP。 首先...
Creo个人习惯设置好的配置文件
PTC creo3.0 M190安装包,给需要的人提供帮助。Creo是美国PTC公司于2010年10月推出CAD设计软件包。
PTC_Creo_3.0_M040_Win64破解文件
在探讨CROE2E6300处理器与MSI 945P NEO3主板的超频方案之前,我们首先要理解几个关键概念和技术限制。E6300是一款基于Intel Core微架构的CPU,拥有良好的超频潜力,而945P NEO3主板则是基于Intel 945P芯片组设计,它...
"69M2V1.zip" 是一个压缩文件,其中包含了一个或多个与"CROE"相关的文件。CROE通常指的是"Computational Risk and Optimization Engine",这是一个在金融、工程和其他领域中用于处理复杂风险分析和优化问题的计算...
通过学习这个教程,开发者能够深入理解如何在.NET Core项目中使用DI来实现UnitOfWork模式,以及如何有效地管理服务生命周期,同时关注性能和内存效率。通过实践这些知识,可以构建更健壮、可扩展且易于维护的Web应用...
在压缩包文件“Creo自定义背景方案”中,可能包含了作者或者社区成员分享的一些个性化颜色配置,你可以尝试导入这些文件,看看是否符合你的工作风格。 值得注意的是,颜色设置对于某些特定任务可能会有影响。比如,...