Java多种IO方式的实现与性能对比

一、概述:

(1)Input:这个input是对计算机内存而言的,也就是从外部文件读取信息到内存中,采用了五种方式

(2)Output:这个Output是对计算机内存而言的,也就是从将信息写入外部文件,采用了四种方式

二、具体实现:

(1)Input

A、    InputStream:

    下面的关键代码为in.read(fileContent);

    FileInputStreamin = new FileInputStream(filePath);

    byte[]fileContent = new byte[in.available()];

    in.read(fileContent);

    in.close();

B、 BufferedReader:

下面的关键代码为br.readLine()

    BufferedReaderbr = new BufferedReader(new FileReader(filePath));

    line =br.readLine();

C、 Buffer/Channel:

下面的关键代码为buf.flip();buf.get(fileContent);

 

     RandomAccessFilerandomAccessFile = new RandomAccessFile(filePath, "r");

 

     FileChannel fromChannel =randomAccessFile.getChannel();

 

     long target = fromChannel.size();

     ByteBuffer buf = ByteBuffer.allocate((int)target);

 

     fromChannel.read(buf);

 

    buf.flip();

 

    byte[] fileContent = new byte[buf.remaining()];

 

    buf.get(fileContent);

D、    Files:

    byte[]dataBytes = Files.readAllBytes(Paths.get(filePath));

E、 Scanner:

    while(sc.hasNextLine()) { line = sc.nextLine();}

(2)Output:

A、    OutputStream:

    下面的关键代码为out.write(graphGrammarBytes);

 

    FileOutputStreamout = new FileOutputStream(file);

    out.write(graphGrammarBytes);

    out.close();

B、 BufferedWriter:

    下面的关键代码为writer.write(graphGrammar);

 

    OutputStreamWriterwrite = new OutputStreamWriter(new FileOutputStream(file));

    BufferedWriterwriter = new BufferedWriter(write);

    writer.write(graphGrammar);

    writer.flush();

    将write,writer关闭

C、 Buffer/Channel:

    与读文件的区别在于将用grammar构造好的byteBuffer写进通道

    toChannel.write(byteBuffer);

D、    Files:

    下面的关键代码为writer.write(graphGrammar);

 

    BufferedWriterwriter = Files.newBufferedWriter(Paths.get(filePath + "_Written"),StandardCharsets.UTF_8);

    writer.write(graphGrammar);

    writer.flush();

    writer.close();


三、性能对比:

精准收集io的时间,只考虑内存与磁盘交换的时间,对于一个30M的的txt文件,结果如下所示







四、总结分析:

由于我测量每种io的时间时,采用的精准测量,只测量了io的时间,然而io的时间很大一部分是由垃圾回收决定的,而垃圾回收又具有偶然性。

虽然如此,结合上图,找到相同的部分,还是可以看出哪种io效率比较高的,

对于写来说,Files的效率最高,Writer次之

对于读来说,Scanner>Channel>Files



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值