Я пытался преобразовать ByteBuffer в String и наоборот. вручную, я отлажена мой код, чтобы получить состояние ByteBuffer перед преобразованием его в строку и после, а также:Преобразование ByteBuffer в String и Vice vera - изменение в структуре ByteBuffer
Так что мой HashMap где хранить ByteBuffer выглядит примерно так:
0 = {[email protected]} "studentId" -> "{S: ER3478CT2016,}"
1 = {[email protected]} "collegeId" -> "{S: 123456,}"
2 = {[email protected]} "changeField1" -> "{B: java.nio.HeapByteBuffer[pos=0 lim=424 cap=424],}"
3 = {[email protected]} "studentAddress" -> "{B: java.nio.HeapByteBuffer[pos=0 lim=64 cap=64],}"
4 = {[email protected]} "studentName" -> "{B: java.nio.HeapByteBuffer[pos=0 lim=32 cap=32],}"
5 = {[email protected]} "studentTerm" -> "{B: java.nio.HeapByteBuffer[pos=0 lim=32 cap=32],}"
Но когда я преобразовать его в строку и обратно к ByteBuffer, я вижу следующее изменение:
0 = {[email protected]} "studentId" -> "{S: ER3478CT2016,}"
1 = {[email protected]} "collegeId" -> "{S: 123456,}"
2 = {[email protected]} "changeField1" -> "{B: java.nio.HeapByteBuffer[pos=0 lim=422 cap=466],}"
3 = {[email protected]} "studentAddress" -> "{B: java.nio.HeapByteBuffer[pos=0 lim=121 cap=121],}"
4 = {[email protected]} "studentName" -> "{B: java.nio.HeapByteBuffer[pos=0 lim=56 cap=72],}"
5 = {[email protected]} "studentTerm" -> "{B: java.nio.HeapByteBuffer[pos=0 lim=42 cap=78],}"
так, как я конвертировать мой ByteBuffer в строку является:
ByteBuffer buffer = map.get("changeField1");
String myValue = new String(buffer.array(), "UTF-8");
Кроме того, способ преобразовать строку обратно в ByteBuffer выглядит следующим образом:
ByteBuffer buffer = CharSet.forName("UTF-8").encode(myValue);
Почему изменение в пределах значений и капитализацией, когда строка преобразуется обратно в ByteBuffer? Я думал, так как я не знаю кодировку ByteBuffer, и я использую UTF-8 для кодирования его в String, что может быть причиной? Это правильно или есть более эффективный способ преобразования byteBuffers в строки и наоборот?
Является 'String myValue = new String (changeField.array()," UTF-8 ");' на самом деле предполагается, что это 'String myValue = new String (buffer.array()," UTF-8 "); ? Не могли бы вы изменить? –
Если вы снова конвертируете его в строку, какие строки у вас есть в начале и в конце? – lexicore
@lexicore: струны в порядке. Я нигде не изменяю нити. Я храню строки как таковые. Вы говорите мне снова преобразовать полученный byteBuffer в строку и посмотреть, что является результатом? – chrisrhyno2003