• 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

  • 相关阅读:
    SAP HUM事务代码 HUMAT 之初探
    SAP HUM 锁住一个HU?
    SAP MM 标准采购组织的分配对于寄售采购订单收货的影响
    SAP MM已经转成PO的采购申请Item依旧可以被删除?
    SAP MM A工厂下的PR可以转成B工厂下的PO?
    SAP MM 明明已经扩展供应商到采购组织下,采购订单里还是报错?
    SAP HUM 事务代码HUMO为整托做Scrap
    2018-8-29-Roslyn-静态分析
    2018-2-13-win10-UWP-等级控件
    2018-2-13-win10-uwp-改变鼠标
  • 原文地址:https://www.cnblogs.com/mibing/p/11348180.html
Copyright © 2020-2023  润新知