我需要一個Java中的字節緩衝區類用於單線程使用。當緩衝區滿時,緩衝區應該調整大小,而不是拋出異常或其他東西。對我來說非常重要的問題是性能。什麼是Java中最好的可調整大小的字節緩衝區?
你會推薦什麼?
添加: 在momement我使用ByteBuffer,但它不能調整大小。我需要一個可以調整大小的。
我需要一個Java中的字節緩衝區類用於單線程使用。當緩衝區滿時,緩衝區應該調整大小,而不是拋出異常或其他東西。對我來說非常重要的問題是性能。什麼是Java中最好的可調整大小的字節緩衝區?
你會推薦什麼?
添加: 在momement我使用ByteBuffer,但它不能調整大小。我需要一個可以調整大小的。
任何理由不使用無聊的正常ByteArrayOutputStream?
正如以上miku提到的,Evan Jones gives a review of different types並表明它是非常依賴於應用程序的。所以不知道更多的細節,很難推測。
我會從ByteArrayOutputStream開始,並且只有在分析顯示它是您的性能瓶頸轉移到其他東西時。通常當你認爲緩衝區代碼是瓶頸時,它實際上就是網絡或其他IO--等到性能分析表明你需要進行優化,然後再浪費時間找到替代品。
如果要移動到別的東西,那麼其他的因素,你需要考慮:
你可以使用一個直接的ByteBuffer。直接內存使用虛擬內存開始只在應用程序使用時分配給應用程序。即它使用的主存儲器的數量會自動重新調整大小。
創建一個比你需要的直接的ByteBuffer大,它只會消耗你使用的東西。
不錯,自動爲頁面錯誤:D但直接內存的數量是有限的(雖然它可以設置得足夠高,但)。 DirectByteBuffers需要彙集,因爲它們的分配相當昂貴,尤其是解除分配。 – bestsss 2011-06-13 11:16:21
您也可以編寫手動代碼來連續檢查緩衝區內容,如果它已滿,則創建一個更大的新緩衝區並移動新緩衝區中的所有數據。
備註:微字符標記和字節緩衝區註釋:http://www.evanjones.ca/software/java-bytebuffers.html – miku 2011-06-13 10:46:26
如何將性能和單線程結合使用,普通字節[]容易。 – bestsss 2011-06-13 10:48:36
不能使用byte [],因爲我不知道要寫入的數據的長度。 – Worker 2011-06-13 10:53:20