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