2016-04-11 45 views
0

有沒有一種方法可以避免必須將ByteBuffer中的byte []與ByteBuffer.get()操作複製。直接從ByteBuffer轉到字符串,但沒有中間字節[]?

我一直在尋找這個職位Java: Converting String to and from ByteBuffer and associated problems

,並導致中介CharBuffer的,我不想爲好。

我希望它從ByteBuffer轉到String。

當我知道我有一個byte []底層,這是很容易的代碼,像這樣

new String(data, offset, length, charSet); 

我希望與ByteBuffer的類似的東西。我開始認爲這可能是不可能的?我需要真正解碼ByteBuffer的N個字節。

這可能有些不成熟的優化,但我真的只是好奇,想要測試性能和擠出每一點點。 (個人項目真的)。

感謝, 院長

+2

你的意思是[ByteBuffer.array()](https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html#array%28%29)? – user3159253

回答

2

不是真的直接ByteBuffer,沒有。你需要有中間的東西,因爲String不會把ByteBuffer作爲構造函數的參數,並且你不能換行一個(或者甚至是char[])。如果緩衝區是非直接的,則可以使用array()方法來獲取對後備數組(不是中間數組)的引用,並從中創建String

另一方面,您的項目中可能會有更多性能敏感的地方。

+0

好吧,我正在玩一個nio庫,測試顯示字節複製是昂貴的:(所以我希望能夠防止更大的字節數組拷貝並直接進行,真的好像他們應該有這個功能......。 –

+0

但是,在完整的應用程序堆棧的情況下,它將是最小的 –

+0

我可以想象,可能會出現一些問題,試圖從基本上不受管理(就Java而言)內存中創建Java String,而不進行任何複製之間的字節數。 – Kayaman

相關問題