首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BufferReader.skip ()性能

BufferReader.skip ()性能
EN

Stack Overflow用户
提问于 2012-03-01 21:49:08
回答 1查看 2.1K关注 0票数 2

我可以看到下面两个程序在性能上的巨大差异。

代码语言:javascript
复制
import java.io.*;
import java.util.Date;

class SkipProg2  {

  public static void main (String args[]) {

       System.out.println (" File Reading "+ args.length);
       System.out.println (" 1st Arg "+ args[0]);
       System.out.println (" 2nd Arg "+ args[1]);
        try {
            FileInputStream fis = new FileInputStream(args[0]);

            System.err.println("Time before skip : " + new Date());

            Long off = Long.parseLong(args[1]);

            fis.skip (off);
            System.err.println("Time After skip : " + new Date());


            InputStreamReader isr = new InputStreamReader(fis);
            BufferedReader br = new BufferedReader(isr );

          } // end try
          catch (IOException e) {
            System.err.println("Error: " + e);
         }
    } // end main

}

代码语言:javascript
复制
import java.io.*;
import java.util.Date;

class SkipProg  {

  public static void main (String args[]) {

       System.out.println (" File Reading "+ args.length);
       System.out.println (" 1st Arg "+ args[0]);
       System.out.println (" 2nd Arg "+ args[1]);
        try {
            FileInputStream fis = new FileInputStream(args[0]);

            InputStreamReader isr = new InputStreamReader(fis);
            BufferedReader br = new BufferedReader(isr );

            System.err.println("Time before skip : " + new Date());
            Long off = Long.parseLong(args[1]);

            br.skip (off);
            System.err.println("Time After skip : " + new Date());
          } // end try
          catch (IOException e) {
            System.err.println("Error: " + e);
         }
    } // end main

}

一个用法是FileInputStream.skip (),另一个是BufferReader.skip ()。但是,如果偏移量较大,则会有很大的差异(对于Ex.在多线程应用中,相同代码的差异是巨大的(对于2 Gb的偏移量,大约有15-20分钟的延迟)。我不能用FileInputStream.skip ()替换BufferReader.skip (),因为一个以字节为单位接受偏移量,另一个以字符为单位接受偏移量。对于unicode文件,它是不可替代的。

第一个问题,我的假设是否正确?有什么建议?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-01 21:55:01

跳过字节可以在不读取字节的情况下跳过那么多字节。

跳过字符必须读取所有的字符/字节,才能找到第N个字符的位置。

我很惊讶阅读2 GB的文本需要15-20分钟。我本以为会更接近20秒。你们有什么类型的硬件?

如果你想在一个文本文件中随机访问,你需要维护一个从行号到字节位置的索引(这样花费的时间也是一样的)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9517367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档