我有一個函數將會收到Stream<String>
。該流表示文件中的行(由Files.lines(somePath)
調用)。文件本身實際上是許多文件拼接成一個文件,這樣的事情:將字符串流轉換爲字符串分組列表的有效方法
__HEADER__ # for file 1 data more data ... __HEADER__ # file 2 starts here some more data... ...
我需要將流轉換爲多個物理文件上的文件系統。
我已經嘗試了簡單的辦法,沿着線的東西:
String allLinesJoined = lineStream.collect(Collectors.joining());
// This solution seems to get stuck on the line above^
String files[] = allLinesJoined.split("__HEADER__");
for (fileStr : files)
{
// This function will write each fileStr to a separate file
// (filename is determined by contents of fileStr)
writeToPhysicalFile(fileStr);
}
但輸入文件是約〜300 MB(並能得到較大),這解決方案似乎停留在第一個GET線。如果我有更多的記憶,也許它會完成......?
如果我的出發點是Stream<String>
,還是應該開始進行其他更改,以便這部分代碼只需逐行讀取文件,而無需使用流API,那麼還有更好的方法嗎?
(該行的順序此事確實,在這些文件中的上下文中)
TL;博士
我需要打開表示爲Stream<String>
一個大文件中的許多小文件。每個小文件以__HEADER__
和所有行後開頭,直到下一個__HEADER__
。當前的庫使用流提供文件,但它甚至值得試圖用流來做到這一點,或者如果我改變庫以提供非流功能,我的生活會更容易嗎?
基於衝突的答案可能有一些混亂,你的最終目標是什麼(至少我很困惑)。我理解這個問題,但不是理想的解決方案 –
@ChrisThompson:我也意識到了這一點,並且我認爲我的最新編輯更加清晰。 – FrustratedWithFormsDesigner
流是_really_不是爲此設計的。它們專爲不關心流如何單獨分塊的操作而設計。 –