zoukankan      html  css  js  c++  java
  • java读取文件的几种方式性能比较

        //普通输入流读取文件内容
        public static long checksumInputStream(Path filename)
        {
            try(InputStream in= Files.newInputStream(filename))
            {
                CRC32 crc=new CRC32();
                int c;
                while ((c=in.read())!=-1) 
                {
                    crc.update(c);
                }
                return crc.getValue();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return 0;
            }
        }
        
        //带有缓冲读取文件
        public static long checkSumBufferedInputStream(Path filename)
        {
            try(InputStream in=new BufferedInputStream(Files.newInputStream(filename)))
            {
                CRC32 crc=new CRC32();
                int c;
                while ((c=in.read())!=-1) 
                {
                    crc.update(c);
                }
                return crc.getValue();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return 0;
        }
        
        //随机读取文件
        public static long checksumRandomAccessFile(Path filename)
        {
            try(RandomAccessFile file=new RandomAccessFile(filename.toFile(), "r"))
            {
                long length=file.length();
                CRC32 crc=new CRC32();
                for (int i = 0; i < length; i++) {
                    file.seek(i);
                    int c=file.readByte();
                    crc.update(c);
                }
                return crc.getValue();
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return 0;
        }
        
        //通过磁盘映射读取文件
        public static long checksumMappedFile(Path filename) 
        {
            try(FileChannel channel=FileChannel.open(filename))
            {
                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);
                }
                return crc.getValue();
                
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return 0;
        }

    普通输入流:68513ms

    带缓冲的方式:116ms

    随机访问读取:81203ms

    磁盘映射读取方式:102ms

  • 相关阅读:
    【转】JS模块化工具requirejs教程(二):基本知识
    【转】JS模块化工具requirejs教程(一):初识requirejs
    【转】批处理命令 For循环命令详解!
    【转】NodeJS教程--基于ExpressJS框架的文件上传
    【转】WebSocket 是什么原理?为什么可以实现持久连接?
    网页工具地址
    【转】DataURL在Web浏览器中的兼容性总结
    侯捷STL学习(一)--顺序容器测试
    strstr-strcat实现
    算法设计与分析
  • 原文地址:https://www.cnblogs.com/mibing/p/11348180.html
Copyright © 2011-2022 走看看