作者pttnews (PTT新闻)
看板java
标题[问题] 如何用串流传递资料
时间Wed Dec 7 10:29:46 2011
我最近做一个Class 可以分析巨大文字档里面的资料。50M bytes
会遇到memory out Exception
步骤如下
A function
1. 用BufferedReader串InputStreamReader读取档案
2. 初步分析资料
3. 存入ArrayList
4. 回传ArrayList
B function
1. 取出ArrayList
2. 切割资料
3. 存入HashMap,顺便统计资料重复的次数
C function
1. 分析hashMap,找出重复的次数太少,砍除垃圾的资讯
2. 回传hashMap
D fuction
1. 取出HashMap,存档
因为在 B function 步骤3,吃掉太多记忆体,就memory out Exception
我的想法是把 ABCD function 串在一起
D(C(B(A(in))))
就像
BufferedReader br = new BufferedReader(
new InputStreamReader(new FileInputStream(FileName),CharSet ));
每个function 之间都用Stream 串连 ,不要用Collection 作暂存
不要用Memory 做暂存
请问要如何达成呢?
谢谢大家
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.120.175.188
1F:推 swpoker:不如拿sqlite来做好了~ 12/07 11:40
2F:推 PsMonkey:同楼上,就塞个资料库解决 12/07 14:46
谢谢楼上
sqlite很好用,但是会很慢,
用Memory 做暂存,搜寻时间是0.01 ms为单位
用sqliten搜寻时间会是0.1s为单位,以上是粗估略不会很精准。
该程式为最後分析结果的有效资料是1百万笔,
中间的暂存资料可能是有效资料的五倍以上,用db 可能会非常慢,
谢谢大家
※ 编辑: pttnews 来自: 59.120.175.188 (12/07 15:12)
3F:推 swpoker:记忆体里面只存统计资料~实际资料写到档案或DB去 12/07 17:00
4F:→ swpoker:记忆体的统计资料跟实际资料的媒体用KEY来对映 12/07 17:02
5F:→ swpoker:写入暂存资料可以用多执行绪去做~ 12/07 17:04
6F:推 Chikei:用BDB这类的K/V DB 12/07 17:15
7F:→ adrianshum:重点是你的工作不靠 collection 能做到吗? 12/08 08:52
8F:→ adrianshum:又统计重复次数,又砍垃圾资讯的。这类要收完才能做吧 12/08 08:53
9F:推 PsMonkey:塞资料库很慢? 那你应该是没有用批次 execute 12/08 09:14