发新话题
移动帖子 加入精华 加入置顶 加入收藏 关注此帖

使用有限内存处理,读取超大文本文件



使用有限内存处理,读取超大文本文件

各位大虾:
现有一个每行固定格式的.txt文本,我需要每行进行解析、处理并导入数据库。
我采用的是readline的方式处理。
当行数不多时,还可以。
当行数多时,内存占用大,效率低。
请问如何处理更合理?
谢谢先

针对所有文件(文本,非文本)
File file = new File("filename");
BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file),10*1024*1024); // 用10M的缓冲读取
专门针对文本文件,还可以使用BufferedReader指定缓冲
File file = new File("filename");
BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file)); 
BufferedReader reader = new BufferedReader(new InputStreamReader(fis),10*1024*1024);// 用10M的缓冲读取文本文件
我给的代码是占用10M的缓冲,也就是说,无论你读取多大的文件,他只占用大约10M的内存空间进行处理。他会自动从文件里面读取剩余部分的。
你的代码只需要继续 readLine(), 就行了。
JAVA世纪网
愿意为喜欢JAVA的朋友提供一点帮助
编辑 回复 快速回复 TOP

Re:使用有限内存处理,读取超大文本文件

默认 buffer 大小是 8192(8k)字节,比 10M 小得多。采用缓冲Reader读取时并不会增加内存的耗用。内存大量的占用可能是由于其他方面的原因。

PS:BufferedReader 也有一个可以设置缓冲区大小的构造,并不需要使用 BufferedInputStream 的啊。
/+〆=う
编辑 回复 快速回复 TOP

Re:使用有限内存处理,读取超大文本文件

谢谢,我更新了一下帖子!
快乐渡过每一天,减肥坚持每一天
编辑 回复 快速回复 TOP

Re:使用有限内存处理,读取超大文本文件

学习中
编辑 回复 快速回复 TOP

Re:使用有限内存处理,读取超大文本文件

缓冲区最大是多少,难道是跟pc本身的内存有关
编辑 回复 快速回复 TOP

Re:使用有限内存处理,读取超大文本文件

不错,学习
编辑 回复 快速回复 TOP

Re:使用有限内存处理,读取超大文本文件

学习了
编辑 回复 快速回复 TOP
发新话题