簡體   English   中英

將DataOutputStream以“動態”大小寫入ByteArray / ByteBuffer中嗎?

[英]Write DataOutputStream in ByteArray / ByteBuffer with “dynamic” size?

我問自己是否有一個很好的解決方案,可以通過TCP接收數據並在DataInputStream中讀取數據,並將數據存儲在“動態”大小的字節數組中。 我考慮過一些解決方案,例如寫入緩沖區,最后將其存儲在創建的數組中,該數組與我收到的數據包一樣大。

這是一個例子:我通過TCP接收的數據(逐字節)為n * 13字節,數據包的末尾為13字節的零(13字節的零是唯一的,之前不能在數據中)。 下一個數據包是m * 13字節+ 13字節的零,依此類推。 因此,我想收聽流並將n * 13字節存儲在不帶零的字節數組中(我之前不知道一個數據集的大小)。

你能告訴我如何瘦身嗎?

提前致謝!

克里斯

我會將數據直接讀取到直接的ByteBuffer中。 您也不需要DataInputStream。 我將使ByteBuffer大於所需的大小,例如1 MB或10 MB,並使用未使用的直接緩沖區(例如,未使用的本機內存)僅使用虛擬內存而非實際內存的事實。 我將確保盡可能多地重用此緩沖區,理想情況下應在應用程序的整個生命周期內都將其重用。

在64位環境中,可以使緩沖區很大。 例如1 GB,影響不大。

如果要最大程度地減少內存消耗,我將在收到數據時對其進行處理。 這樣,您就不必先存儲它。 聽起來最小的大小是13個字節,並且可以使緩沖區大小合理,例如512個字節或2 KB。

暫無
暫無

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

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