簡體   English   中英

字符和字節緩沖區的編碼和解碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM