[英]char and byte buffer encoding & decoding
我試圖了解編碼方式,這是我的編碼和解碼字符串的代碼。
Charset utfset = Charset.forName("UTF-8");
CharsetEncoder encoder = utfset.newEncoder();
String text = "java.abcded.tocken";
CharBuffer cb = CharBuffer.wrap(text.toCharArray());
ByteBuffer bb = encoder.encode(cb);
byte[] bytes = bb.array();
CharsetDecoder isodecoder = utfset.newDecoder();
CharBuffer isodcb = isodecoder.decode(bb);
System.out.println(String.valueOf(cb.array()).equals(String.valueOf(isodcb.array())));
CharBuffer isodcb2 = isodecoder.decode(ByteBuffer.wrap(bytes));
System.out.println(String.valueOf(cb.array()).equals(String.valueOf(isodcb2.array())));
當使用byteBuffer本身執行解碼時,字符串是相等的,但是,當使用bytebuffer中的字節數組的bytebuffer.wrap執行解碼時,字符串將不相等。 它在末尾添加空格,這背后有原因嗎?
CharsetEncoder.encode不保證基礎數組的大小,也不保證ByteBuffer
實際上將由array支持 。 支持緩沖區的數組大於其中包含的字節數。
如果運行此代碼,則應該看到不同的數字:
CharsetEncoder encoder = StandardCharsets.UTF_8.newEncoder();
String text = "java.abcded.tocken";
CharBuffer cb = CharBuffer.wrap(text.toCharArray());
ByteBuffer bb = encoder.encode(cb);
System.out.println(bb.remaining());
System.out.println(bb.array().length);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.