2015-06-08 4 views
1

Как читать данные, хранящиеся в ByteBuffer?Как читать данные ByteBuffer

  • setValue() - получает значение «12» 10 и преобразуется в шестнадцатеричное значение и хранится в String[] данных.
  • write() - преобразует данные в байты и сохраняет в ByteBufferdest.
  • readBuffer - Как читать данные от ByteBuffer?
static String[] data = {}; 
//value = "12 10"; 
String setValue(String value) { 
    String[] samples = value.split("[ ,\n]+"); 
    data = new String[samples.length]; 

    //Generates Hex values 
    for (int i = 0; i < samples.length; i++) { 
     samples[i] = "0x"+String.format("%02x", Byte.parseByte(samples[i])); 
    //data[i] will have values 0x0c, 0x0a 
     data[i] = samples[i]; 
    } 
    System.out.println("data :: " +Arrays.toString(samples)); 
    return value; 
} 


void write(int sequenceNumber, ByteBuffer dest) { 
     for (int i = 0; i < data.length; i++) { 
      System.out.println("data[i] in bytes :: "+data[i].getBytes()); 

      dest.put(data[i].getBytes());   

     } 

    } 

void readBuffer(ByteBuffer destValue) 
{ 
     //How to read the data stored in ByteBuffer? 
} 
+0

Вы прочитали личную информацию? – RealSkeptic

+0

Это вход: String dataValue = "12 10"; Он преобразуется в шестнадцатеричный, как 0x0c, 0x0a, и добавляется к массиву String [], а затем добавляется в ByteBuffer, как this dest.put (data [i] .getBytes()). Теперь мне нужно написать функцию, которая читает ByteBuffer «dest» и возвращает вывод 0x0c, 0x0a. Кто-нибудь может предложить, как это можно сделать? –

ответ

0

Вы можете получить подкладочный массив в ByteBuffer с .array(). Если вы хотите преобразовать его в String, вам также нужно будет получить текущую позицию, иначе у вас будет много нулевых байтов в конце. Таким образом, у вас получится код:

new String(buf.array(), 0, buf.position()) 

Редактировать: Оказывается, вам нужны значения байтов. Те, которые вы могли бы получить, позвонив по телефону Arrays.toString(Arrays.copyOf(buf.array(), 0, buf.position()) или в цикл x от 0 до buf.position, вызвав Integer.toString((int)buf.get(x) & 0xFF, 16) (чтобы получить шестизначный шестизначный код) и собирая результаты в StringBuilder.

+0

Он печатает все в одной строке как 0x0c0x0a, возможно ли получить вывод как 0x0c, 0x0a. Спасибо –

+0

System.out.println (Arrays.toString (Arrays.copyOf (dest.array(), dest.position()))); возвращается [48, 120, 48, 99, 48, 120, 48, 97], похоже, что это значения ASCI. Но я хочу, чтобы результат был 0x0c, 0x0a. Есть ли возможность получить это? –

+0

Да, для чего нужно перебрать значения и вызвать 'Integer.toString ((int) buf.get (x) & 0xFF, 16)' для каждого, затем 'add'ing (возможно, с разделителем и префиксом '0x ') в StringBuilder. Какую версию java вы настраиваете? – llogiq

1
destValue.rewind() 
while (destValue.hasRemaining()) 
    System.out.println((char)destValue.get()); 
} 
+0

Это всего лишь распечатка большого количества «0» –

+0

ли это для помощи? (см. отредактированный код) –

Смежные вопросы