簡體   English   中英

Java:對數據進行分塊處理

[英]Java: stream processing of data which comes in chunks

給定我們有一些網絡或其他進程,這些進程會分塊獲取所需的數據。 每個塊都是字節數組。 數據的性質只是一個簡單的文本文件,其中包含許多行。 我們要逐行處理此文件。 這可能嗎?

一種簡單的方法是等所有數據都到來,同時將所有塊添加到ByteBuffer中,或者通過System.arrayCopy將它們簡單地合並到一個大字節數組中。 之后,我們可以從中創建一個大String並逐行讀取它,或者創建ByteArrayInputStream並在轉換為InputStreamReader之后使用某些Reader對其進行讀取。

可以,但是我們可以以實時流的方式進行操作,在到達時讀取下一個塊嗎? 不能保證塊由一些完整的行組成。 它可以在行的中間結束,應該對其進行處理,即在這種情況下,我們應該等待下一個塊。

有沒有一種方法無需等待文件結束?

這與從BufferedReader中讀取並沒有什么不同。 不同之處在於,由於正在處理當前塊,因此BufferedReader不會在后台緩沖更多數據; 它等待直到它為空,然后調用一些read()方法。 但是,如果可以,請將BufferedReader連接到您的輸入,並使事情保持簡單。

如果需要並行閱讀,請查看PipedInputStream / PipedOutputStream。 它們是配對的,其想法是讓一個線程將其從流讀取的數據寫入PipedOutputStream,然后另一個線程從PipedInputStream讀取。

或者,您可以使用非阻塞IO,但這需要保存處理上下文,以便以后可以恢復它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM