如果你写了一个程序读取一个8MB的文本文件,一次读取一行即一个String对象,你发现运行效率不高,首先要考虑的是哪里的问题?

解决方案 »

  1.   

    read(byte[] b)   b设大点被
    我在API看了写,没见有效率的读取方法,估计,在工作常用到的人,会知道吧?
      

  2.   

    可以试试RandomAccessFile 随机输入流类 下面是API文档上摘下来的: java.io 
    类 RandomAccessFile 
    java.lang.Object 
    java.io.RandomAccessFile 
    所有已实现的接口: 
    Closeable, DataInput, DataOutput -------------------------------------------------------------------------------- public class RandomAccessFileextends Objectimplements DataOutput, DataInput, Closeable此类的实例支持对随机存取文件的读取和写入。随机存取文件的行为类似存储在文件系统中的一个大型字节数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机存取文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。 通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException(是一种 IOException)。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException,而不是 EOFException。需要特别指出的是,如果流已被关闭,则可能抛出 IOException。 尝试使用RandomAccessFile,但是还是有些问题,使用BufferedReader,修改默认的缓冲区大小其实8MB不是很大的,要是更大,就要注意内存溢出问题了
      

  3.   

    8M不算大,不知道你使用什么方法读的,通常BufferedReader的效率就很好了。
      

  4.   

    同意楼上的,用BufferedReader。
    对于8M,用InputStreamReader也行。
      

  5.   

    我曾经试着用BufferedReader读一个近2G的文件 没见有什么问题
      

  6.   

    兄弟你的时间消耗主要在IO操作太多,说简单点就是你的缓存小了,可以尝试bufferedReader来读取,加缓存为1M以上char buf[]=new char[1024];
      

  7.   

    8M不算大,不知道你使用什么方法读的,通常BufferedReader的效率就很好了。
      

  8.   

    用BufferedReader,缓存设置大点,10M也行,我做过一个DES加解密文件的,缓存调置为20M也可以的,这样速度会很快
      

  9.   

    用BufferedReader用什么可以定位的?
      

  10.   

    曾经面试时被问及读取大文件时首选什么文件访问类:
    应该是RandomAccessFile吧