关于读取文本文件 如果你写了一个程序读取一个8MB的文本文件,一次读取一行即一个String对象,你发现运行效率不高,首先要考虑的是哪里的问题? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 read(byte[] b) b设大点被我在API看了写,没见有效率的读取方法,估计,在工作常用到的人,会知道吧? 可以试试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不是很大的,要是更大,就要注意内存溢出问题了 8M不算大,不知道你使用什么方法读的,通常BufferedReader的效率就很好了。 同意楼上的,用BufferedReader。对于8M,用InputStreamReader也行。 我曾经试着用BufferedReader读一个近2G的文件 没见有什么问题 兄弟你的时间消耗主要在IO操作太多,说简单点就是你的缓存小了,可以尝试bufferedReader来读取,加缓存为1M以上char buf[]=new char[1024]; 8M不算大,不知道你使用什么方法读的,通常BufferedReader的效率就很好了。 用BufferedReader,缓存设置大点,10M也行,我做过一个DES加解密文件的,缓存调置为20M也可以的,这样速度会很快 用BufferedReader用什么可以定位的? 曾经面试时被问及读取大文件时首选什么文件访问类:应该是RandomAccessFile吧 java 继承 重载 一个类继承多接口,接口方法重名但返回值不同的问题 菜鸟提问:谁能给我写一个ByteArrary的例子 初学java应该先看些什么书籍呢?java里面的东西是不是很多,什么j2ee,j2se到底是些什么东西呢? 一个statement能否生成多个不同ResultSet 快来看看这段代码吧,小弟给大家磕头了.为什么不好使?(在线等!!急!!!) java 如何将二进制转64进制 netwebs请接分 关于多线程的关闭问题:参与有分 c++转java 望高手指教 用JAVA语言编写一个程序求一个一元二次方程的根(用弦截法) 求一个数据库级联查询实例?
我在API看了写,没见有效率的读取方法,估计,在工作常用到的人,会知道吧?
类 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不是很大的,要是更大,就要注意内存溢出问题了
对于8M,用InputStreamReader也行。
应该是RandomAccessFile吧