2017-04-11 110 views
0

考慮操作的順序如下:的Java NIO字符集編碼解碼

String pt = "abcd"; 
byte[] b64 = Base64.decodeBase64(pt.getBytes("UTF-8")); 
ByteBuffer wrap = ByteBuffer.wrap(b64); 
CharBuffer decode = StandardCharsets.UTF_8.decode(wrap); 

ByteBuffer encode = StandardCharsets.UTF_8.encode(decode); 
byte[] bytes = new byte[encode.remaining()]; 
encode.get(bytes); 
String x = Base64.encodeBase64String(bytes); // "ae+/vR0=" 

爲什麼ptx不相等?

我使用這些功能是否錯誤?到底是怎麼回事?

回答

0

據我瞭解,你想要將一些字符串編碼爲base64格式並將其解碼爲相同的字符串。

代碼:

public static void main(String[] args) { 
    final String pt = "abcd"; 
    final byte[] b64 = Base64.encodeBase64(pt.getBytes(StandardCharsets.UTF_8)); 
    System.out.println(new String(b64, StandardCharsets.US_ASCII)); 


    final String x = new String(Base64.decodeBase64(b64), StandardCharsets.UTF_8); 
    System.out.printf("pt: %s -- x: %s", pt, x); 
} 

或者

public static void main(String[] args) { 
    final String pt = "abcd"; 
    final ByteBuffer buffer = StandardCharsets.UTF_8.encode(pt); 
    final byte[] base64 = Base64.encodeBase64(buffer.array()); 
    System.out.println(new String(base64)); 

    final String x = StandardCharsets.UTF_8.decode(ByteBuffer.wrap(Base64.decodeBase64(base64))).toString(); 
    System.out.printf("pt: %s -- x: %s", pt, x); 
} 

結果:

YWJjZA== 
pt: abcd -- x: abcd