利用java内存映射文件机制实现CRC循环冗余校验
2009-06-11 14:08
447 查看
import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.util.zip.CRC32; public static void main(String[] args){ try { //对文件进行crc校验 long begin = System.currentTimeMillis(); FileInputStream in = new FileInputStream("code.py");//指定目标文件 FileChannel channel = in.getChannel(); //从文件中获取一个通道 CRC32 crc = new CRC32(); int length = (int)channel.size(); MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, length); //用只读模式从该通道获取字节缓冲,实现文件到内存的映射 for(int i = 0;i<length;i++) { int c = buffer.get(i); crc.update(c);//按字节做crc } System.out.println("crc校验和:"+(Long.toHexString(crc.getValue())).toUpperCase()); long end = System.currentTimeMillis(); System.out.println("运行"+(end-begin)+"ms"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
运行结果:
crc校验和:4831ACAC
运行16ms
校验和与winrar校验结果一致,如下图
java自1.4以后io机制里多了一个nio包(new I/O),这个包的存在改进了java IO 操作的机制,包括
字符集编码、解码器
非阻塞的I/O
内存映射文件
文件加锁机制
内存映射文件机制类似于操作系统的虚拟内存,它实现了文件到内存的映射,执行效率介于普通文件操作和内存操作之间,适合大文件的读取,和计算
使用方法很简单:
从文件输入流获取一个‘channel’即通道 传给一个FileChannel
用FileChannel的map方法实现一个文件到内存MappedByteBuffer的字节映射
这样一个从文件到内存的映射机制就建立起来了,接下来就是你要做的内存操作
如上内容参考于Cay S. Horstmann <java核心技术卷II>
相关文章推荐
- 利用java内存映射文件机制实现CRC循环冗余校验
- 利用java类的反射机制,实现了 映射 获得post(get)的参数 的BaseServlet
- C/C++(5)实现大数据文件的内存映射机制
- Java NIO 内存映射文件实现进程间通信
- windows下利用文件映射实现共享内存
- windows下利用文件映射实现共享内存
- 利用Java的反射与代理机制实现AOP
- 利用JAVA/JSF/JSP实现读取并截取.txt文件http://zhidao.baidu.com/question/42189115.html
- 利用Java的反射机制实现Bean实体与Map自动转换的工具类
- Java-NIO(五):通道(Channel)的数据传输与内存映射文件
- 用文件映射(File Mapping)实现进程间内存共享
- 用文件映射(File Mapping)实现进程间内存共享
- 利用内存映射文件在两个进程间共享数据 转
- 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
- Java-NIO(五):通道(Channel)的数据传输与内存映射文件
- java内存映射文件
- 内存映射文件-java读取超大文件
- Java利用SFTP实现文件上传与下载
- windows 内存映射文件实现数据共享之原理
- JAVA NIO FileChannel 内存映射文件