2014-09-04 178 views
2

What's的的Java字符串編碼

"hello world".getBytes("UTF-8"); 

Charset.forName("UTF-8").encode("hello world").array(); 

區別? 第二個代碼在大多數情況下會在末尾產生一個0字節的字節數組。

回答

4

你的第二個片段使用ByteBuffer.array(),它只返回支持ByteBuffer的數組。這可能比編寫至ByteBuffer的內容長。

基本上,我想,如果你想使用第一種方法一byte[]String :)你可以與ByteBuffer處理將其轉換爲一個byte[]使用其他方式,但考慮到String.getBytes(Charset)提供方便,我只是使用...

示例代碼從ByteBuffer檢索字節:

ByteBuffer buffer = Charset.forName("UTF-8").encode("hello world"); 
byte[] array = new byte[buffer.limit()]; 
buffer.get(array); 
System.out.println(array.length); // 11 
System.out.println(array[0]);  // 104 (encoded 'h') 
+0

只是觀察到'字節[] = B1的 「Hello World」 .getBytes( 「UTF-8」 ); byte [] b2 = Charset.forName( 「UTF-8」)。encode(「hello world」)。array();'。 'b1.length'打印出11,'b2.length'打印出12個。 – 2014-09-04 16:29:19

+2

@Sandeep:是的,因爲'ByteBuffer'大概被分配了長度爲12的後備數組。如果你打開'limit()'而不是ByteBuffer,你只會得到11個字節...... – 2014-09-04 16:38:40