2017-02-23 158 views
0

如何將CharBuffer轉換爲ByteBuffer?有沒有簡單的方法來完成這個?將CharBuffer轉換爲ByteBuffer

另一方面,很容易通過ByteBuffer.asCharBuffer()ByteBuffer得到CharBuffer

編輯:

,我知道越來越最簡單​​的方式ByteBuffer通過Charset.encode(CharBuffer cb)

,但我希望有一個更直接的方式,即簡單地得到用於存儲實際的字符底層字節數組,沒有做任何編碼。

編輯2: 它只是發生在我說的CharBuffer將其數據存儲在內部char[]而不是byte[]因此沒有根本byte[]

+0

只是爲了設置它,它不會創建一個CharBuffer,它會爲ByteBuffer的其餘部分創建一個CharBuffer視圖。 –

+0

您可以通過CharBuffer視圖重新寫入ByteBuffer。不知道這是否給你你想要的東西?也許你應該嘗試從更高的層面解釋你想要獲得什麼以及你爲什麼要問這個問題。 –

+1

這不是我的主場,所以我可能都錯了:'ByteBuffer.wrap(yourCharBuffer.toString()。getBytes())'?您可以選擇將'CharSet'或字符集名稱傳遞給'getBytes()'來控制字符編碼。 –

回答

1

這是一個建議。

CharBuffer yourCharBuffer = CharBuffer.wrap("Roland"); 

    ByteBuffer result = ByteBuffer.allocate(20); 
    CharBuffer converter = result.asCharBuffer(); 
    converter.append(yourCharBuffer); 

    System.out.println(Arrays.toString(result.array())); 

上面片斷輸出:

[0, 82, 0, 111, 0, 108, 0, 97, 0, 110, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0] 

我收到字節數組出被同時放後盾converterCharArrayresultByteArray。它儘可能接近您的要求。我可能會錯過一些東西。

您注意到,由於在這種情況下,字節數組的空間比緩衝區內容所需的空間要多,所以最後還有一些額外的0字節。

如果填充原始文件CharBuffer的代碼可能會填充您支持的字節緩衝區CharBuffer,它可能會更簡單一些。

而你自己的建議,Charset.encode(CharBuffer),還是比較簡單。