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
嗯。說得通。謝謝。 –