[問題] 如何用串流傳遞資料

看板java作者 (PTT新聞)時間14年前 (2011/12/07 10:29), 編輯推噓5(504)
留言9則, 4人參與, 最新討論串1/1
我最近做一個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

12/07 11:40, , 1F
不如拿sqlite來做好了~
12/07 11:40, 1F

12/07 14:46, , 2F
同樓上,就塞個資料庫解決
12/07 14:46, 2F
謝謝樓上 sqlite很好用,但是會很慢, 用Memory 做暫存,搜尋時間是0.01 ms為單位 用sqliten搜尋時間會是0.1s為單位,以上是粗估略不會很精準。 該程式為最後分析結果的有效資料是1百萬筆, 中間的暫存資料可能是有效資料的五倍以上,用db 可能會非常慢, 謝謝大家 ※ 編輯: pttnews 來自: 59.120.175.188 (12/07 15:12)

12/07 17:00, , 3F
記憶體裡面只存統計資料~實際資料寫到檔案或DB去
12/07 17:00, 3F

12/07 17:02, , 4F
記憶體的統計資料跟實際資料的媒體用KEY來對映
12/07 17:02, 4F

12/07 17:04, , 5F
寫入暫存資料可以用多執行緒去做~
12/07 17:04, 5F

12/07 17:15, , 6F
用BDB這類的K/V DB
12/07 17:15, 6F

12/08 08:52, , 7F
重點是你的工作不靠 collection 能做到嗎?
12/08 08:52, 7F

12/08 08:53, , 8F
又統計重複次數,又砍垃圾資訊的。這類要收完才能做吧
12/08 08:53, 8F

12/08 09:14, , 9F
塞資料庫很慢? 那你應該是沒有用批次 execute
12/08 09:14, 9F
文章代碼(AID): #1Eti-Snb (java)