• 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

  • 相关阅读:
    Android开发笔记——WebView
    字符串_最小表示法求循环串的最小序列(HDU_4162)
    STL_map简单应用(HDU_1075)
    DP_最大子序列和(HDU_1003)
    STL map 使用方法(转)
    数学_线性筛法建立素数表(HDU_1262)
    學習筆記 ADO數據庫訪問技術
    C#多线程学习
    Java容器
    选取单元格的基本语句
  • 原文地址:https://www.cnblogs.com/mibing/p/11348180.html
Copyright © 2020-2023  润新知