1
我想了解编码方式,这里是我的代码来编码和解码一个字符串。字符和字节缓冲区编码和解码
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进行,则字符串不相等。它追加空格到底,这背后有一个原因吗?
是,容量超过限制。但是这种情况只发生在很少的文字上,而其他文字很少。即限制和容量相同。是否有任何特定模式或任何导致bytebuffer容量超过限制的值? –
它可能是一个小小的缺陷,但该方法的行为与记录。除非你打算使用'position()'和'limit()'方法来告诉你数组的哪些部分包含数据,否则我会将其视为实现细节并且不访问基础数组。 – McDowell
嗯。说得通。谢谢。 –