社区
Java SE
帖子详情
要求用java实现读取超大文件
lptt
2009-07-21 06:23:26
要求实现读取超大文件(2G左右),并找到指定的字符串/
1.首先这么大的文件,怎么生成呢?
2.怎样读取呢?肯定会死机啊
3.语言或哪种环境好呢?
各位给支个招
...全文
1323
27
打赏
收藏
要求用java实现读取超大文件
要求实现读取超大文件(2G左右),并找到指定的字符串/ 1.首先这么大的文件,怎么生成呢? 2.怎样读取呢?肯定会死机啊 3.语言或哪种环境好呢? 各位给支个招
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
27 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
loveshuyingkongshi
2011-12-08
打赏
举报
回复
[Quote=引用 13 楼 gaoch_2000 的回复:]
java读写文件是调用本地方法来读写的,最终要用到windows的api。你为什么要把2g大的文件都存放到内存里,就在硬盘里放着,直接读取不就行了?建立一个索引会提高速度。
人家数据库文件有几十个G,频繁读取,也没有听说过内存不够用的
[/Quote]
人家昰分批讀的吧,這么大的文件如果不分批操作,肯定會掛吧!
syflyhua
2011-12-07
打赏
举报
回复
[Quote=引用 9 楼 lovecj6185 的回复:]
引用楼主 lptt 的回复:
要求实现读取超大文件(2G左右),并找到指定的字符串/
1.首先这么大的文件,怎么生成呢?
2.怎样读取呢?肯定会死机啊
3.语言或哪种环境好呢?
各位给支个招
偶实现过5G左右文件的读取,没有出问题
1.用循环生成文件
你就用 PrintWriter类的println方法,一行行的写出来罗
循环个60万次,生成的txt文件都好几个G了
……
[/Quote]
楼主,你的程序是啥样子啊。不会是你给你的程序配了5G再来读吧。晕死。看你说的如此简单。
csgdseed
2009-07-22
打赏
举报
回复
边读边查找
yuwenbao
2009-07-22
打赏
举报
回复
唉。。。线程池啊,开启线程池,我的经验,根据配置不同,五到十个是没什么问题的
紫炎圣骑
2009-07-22
打赏
举报
回复
生成文件要多长时间?
lptt
2009-07-22
打赏
举报
回复
我试了一下 我的程序 搜索两个2G的文件(线程1对应第一个,线程2对应第二个)结果用时为85秒 平均分析一个是42秒左右 效率提高20%啊 开线程看来有些优化的 但估计多了就不行了
lovecj6185
2009-07-22
打赏
举报
回复
[Quote=引用 20 楼 yuwenbao 的回复:]
先用多线程来读取
采用用bufferedReader来读,不过注意,bufferedReader有个问题,就是readline方法遇到回车会挂起线程,所以要注意下
还要加快速度,就用nio来读吧,映射到内存中,几兆几兆地读就是了
[/Quote]
楼上是说用MappedByteBuffer类吧
不过偶没有用过,不知道效果如何
其实,还是不建议开线程的,因为线程本身就是十分耗资源的
在加上io,jvm会吃不消
偶主要是扩充heapsize,-Xmx1024m 就是把分配给jvm的内存设为1G
当然这要看你机器的性能了
如果2G的内存,还勉强可以这样设
flybird
2009-07-22
打赏
举报
回复
nio channel来读取
yuwenbao
2009-07-22
打赏
举报
回复
先用多线程来读取
采用用bufferedReader来读,不过注意,bufferedReader有个问题,就是readline方法遇到回车会挂起线程,所以要注意下
还要加快速度,就用nio来读吧,映射到内存中,几兆几兆地读就是了
lptt
2009-07-22
打赏
举报
回复
[Quote=引用 17 楼 lovecj6185 的回复:]
引用 15 楼 lptt 的回复:
我实现了一个小demo 在一2G的文本中搜索指定字符串 用了55秒左右, 这个慢吗
不好说
要看你的系统配置
包括jvm的heapsize等
[/Quote]
兄台 程序还可以怎么优化 我和你的处理方法差不多
用多线程能好些吗
lptt
2009-07-22
打赏
举报
回复
en 差不多 我每次读10M 左右 估计程序的瓶颈就在于读硬盘的速度了吧
lovecj6185
2009-07-22
打赏
举报
回复
[Quote=引用 15 楼 lptt 的回复:]
我实现了一个小demo 在一2G的文本中搜索指定字符串 用了55秒左右, 这个慢吗
[/Quote]
不好说
要看你的系统配置
包括jvm的heapsize等
紫炎圣骑
2009-07-22
打赏
举报
回复
是平均55秒吗?
lptt
2009-07-22
打赏
举报
回复
我实现了一个小demo 在一2G的文本中搜索指定字符串 用了55秒左右, 这个慢吗
gaoch_2000
2009-07-21
打赏
举报
回复
java读写文件是调用本地方法来读写的,最终要用到windows的api。你为什么要把2g大的文件都存放到内存里,就在硬盘里放着,直接读取不就行了?建立一个索引会提高速度。
人家数据库文件有几十个G,频繁读取,也没有听说过内存不够用的
Java2King
2009-07-21
打赏
举报
回复
用Lucene 建立索引,再查找
dingoc
2009-07-21
打赏
举报
回复
进来学习下到底怎么个读取法...
wusenet041
2009-07-21
打赏
举报
回复
这个应该很困难吧 即使做出来 不管是读取还是查找速度都相当慢
lovecj6185
2009-07-21
打赏
举报
回复
[Quote=引用楼主 lptt 的回复:]
要求实现读取超大文件(2G左右),并找到指定的字符串/
1.首先这么大的文件,怎么生成呢?
2.怎样读取呢?肯定会死机啊
3.语言或哪种环境好呢?
各位给支个招
[/Quote]
偶实现过5G左右文件的读取,没有出问题
1.用循环生成文件
你就用 PrintWriter类的println方法,一行行的写出来罗
循环个60万次,生成的txt文件都好几个G了
2.用BufferedReader类的readLine方法再一行行读出
偶当时是读到一个ArrayList里的,读一段,把这个ArrayList给清空一下
循环把文件读完,你可以边读边查找
3.语言和环境?
没太大区别吧,偶当时是java实现的
其他的语言也应该能够实现的
bolink5
2009-07-21
打赏
举报
回复
这个真的有点不现实啊。太难了啊
加载更多回复(7)
多线程 +
java
nio
实现
按行
读取
并处理
超大
文件
之前通过
java
nio
实现
了按行读写
文件
的方法,但由于是单线程读写,所以当
读取
数据量比较大的
文件
时性能肯定会是个大问题,所以为了解决
读取
处理大
文件
时性能上的问题,就在原来按行
读取
文件
的基础上增加了多线程的
实现
,并使用线程来进行线程调度,思路和其它相关博客都一样,只是在代码
实现
的方式上有所区别,整体思路就是根据初始化线程数量来将
文件
进行分段
读取
,一个线程
读取
一个片段的内容,然后将
读取
到的行数据...
【开发随记】
JAVA
超大
文件
的
读取
和写入
实现
(附demo)
因近期工作需要对
超大
单文本
文件
进行
读取
和写入,经过简单研究分别写了
读取
类和写入类供项目使用。现在简单整理出来分享。核心思想就是通过MappedByteBuffer进行
读取
和写入。
java
多线程按行
读取
文件
_
java
使用多线程
读取
超大
文件
接上次写的“
java
读取
超大
文件
”。在
读取
超过10G的
文件
时会发现一次读一行的速度实在是不能接受,想到使用多线程+FileChannel来做一个使用多线程版本。基本思路如下:1.计算出
文件
总大小2.分段处理,计算出每个线程
读取
文件
的开始与结束位置(
文件
大小/线程数)*N,N是指第几个线程,这样能得到每个线程在读该
文件
的大概起始位置使用"大概起始位置",作为读
文件
的开始偏移量(fileChannel...
内存
文件
映射方式
读取
超大
文件
踩坑题解析
问:使用内存
文件
映射 MappedByteBuffer 读
超大
文件
会有什么问题吗? 答:这种方式存在一个致命问题就是依然没法
读取
超大
文件
(大于 Integer.MAX_VALUE),因为 FileChannel 的 map 方法中 size 参数会有大小限制,源码中发现该参数值大于 Integer.MAX_VALUE 时会直接抛出 IllegalArgumentException(“Size e...
java
内存
文件
映射_
Java
内存
文件
映射方式
读取
超大
文件
解析
问:使用内存
文件
映射 MappedByteBuffer 读
超大
文件
会有什么问题吗?答:这种方式存在一个致命问题就是依然没法
读取
超大
文件
(大于 Integer.MAX_VALUE),因为 FileChannel 的 map 方法中 size 参数会有大小限制,源码中发现该参数值大于 Integer.MAX_VALUE 时会直接抛出 IllegalArgumentException("Size exc...
Java SE
62,620
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章