`

利用java内存映射文件机制实现CRC循环冗余校验

    博客分类:
  • java
阅读更多
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

java自1.4以后io机制里多了一个nio包(new I/O),这个包的存在改进了java IO  操作的机制,包括 字符集编码、解码器,非阻塞的I/O,内存映射文件,文件加锁机制,内存映射文件机制类似于操作系统的虚拟内存,它实现了文件到内存的映射,执行效率介于普通文件操作和内存操作之间,适合大文件的读取,和计算.



使用方法很简单:
从文件输入流获取一个‘channel’即通道 传给一个FileChannel
用FileChannel的map方法实现一个文件到内存MappedByteBuffer的字节映射
这样一个从文件到内存的映射机制就建立起来了,接下来就是你要做的内存操作





分享到:
评论

相关推荐

    matlab说话代码-ECC-Verilog-HDL-AutoGenerator:循环冗余校验(一种纠错码)软件(MATLAB)和硬件(Ver

    循环冗余校验(CRC,一种纠错码)的软件和硬件实现。 可以为任何指定的CRC生成器多项式自动生成硬件描述语言。一个循环校验码(一种ecc错误校验码)的软件和硬件实现软件实施 由于强大的矩阵计算功能和GUI功能,我...

    第五版软件设计师笔记

    7.常用校验码:奇偶校验码(只能检错)、海明码(纠错加检错)、循环冗余校验码( CRC)。 8.计算机体系结构分类:单处理系统,并行处理与多处理系统,分布式处理系统。 9.指令集的发展:CISC(复杂指令集计算机):...

    软考中级软件设计师笔记.zip

    常用校验码常用校验码:奇偶校验码(只能检错)、海明码(纠错加检错)、循环冗余校验码(CRC)。 8.计算机体系结构分类计算机体系结构分类:单处理系统,并行处理与多处理系统,分布式处理系统。 9.指令集的发展:...

    Python Cookbook

    2.30 计算CRC-64循环冗余码校验 102 第3章 时间和财务计算 105 引言 105 3.1 计算昨天和明天的日期 111 3.2 寻找上一个星期五 112 3.3 计算日期之间的时段 114 3.4 计算歌曲的总播放时间 115 3.5 计算日期...

    2D数据矩阵式条形码技术的简介

     有两种版本的数据矩阵,一种是基于循环冗余校验(CRC)和卷积纠错,另一种是基于里德所罗门(RS)纠错。对于扫描、读取和提取数据位,基于CRC与基于RS的数据矩阵解码没有区别。  提取数据位之后,基于CRC的解码与...

    DES数据加密

    循环冗余校验是一种典型的校验数据的方法。对于每一个数据块,它使用位循环移位和xor操作来产生一个16位或32位的校验和 ,这使得丢失一位或两个位的错误一定会导致校验和出错。这种方式很久以来就应用于文件的传输,...

    1345个易语言模块

    CRC32.EC cs.ec Cur.ec debugprocess.ec des.ec DES 加密模块 1.0.ec DES加解密模块des.ec DirectX8VB组件调用模块.ec disk.ec DisplaySettings.ec DIY 热键框模块.ec DLL.ec DLL注入模块.ec DOS命令模块.ec dqf1996...

    1350多个精品易语言模块

    CRC32.EC cs.ec Cur.ec debugprocess.ec des.ec DES 加密模块 1.0.ec DES加解密模块des.ec DirectX8VB组件调用模块.ec disk.ec DisplaySettings.ec DIY 热键框模块.ec DLL.ec DLL注入模块.ec DOS命令模块.ec dqf1996...

    《3GPP长期演进(LTE)技术原理与系统设计》part2

    4.8.5 循环冗余校验(CRC) 188 4.9 演进型多媒体(E-MBMS广播和多播业务)技术 189 4.9.1 MBMS信号和单播信号的复用 190 4.9.2 MBSFN传输技术优化 190 4.9.3 MBMS数据和控制信令的复用 190 4.9.4 MBMS的参数设计 190 ...

    《3GPP长期演进(LTE)技术原理与系统设计》Part1

    4.8.5 循环冗余校验(CRC) 188 4.9 演进型多媒体(E-MBMS广播和多播业务)技术 189 4.9.1 MBMS信号和单播信号的复用 190 4.9.2 MBSFN传输技术优化 190 4.9.3 MBMS数据和控制信令的复用 190 4.9.4 MBMS的参数设计 190 ...

Global site tag (gtag.js) - Google Analytics