2015-06-08 75 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 []中,然後像這樣將dest.put(data [i] .getBytes())添加到ByteBuffer中。現在我需要編寫一個讀取ByteBuffer「dest」並返回輸出0x0c,0x0a的函數。任何人都可以請建議如何做到這一點 –

回答

0

你可以得到一個字節緩衝區的支持數組與.array()。如果你想把它轉換爲一個字符串,你還需要獲得當前的位置,否則最後會有很多零字節。所以你會得到如下代碼:

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

編輯:哦,看來你想要的字節值。那些你既可以通過調用0Arrays.toString(Arrays.copyOf(buf.array(), 0, buf.position())或環xbuf.position調用Integer.toString((int)buf.get(x) & 0xFF, 16)(以獲得2位數的十六進制代碼),並在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

沒有鑄造它char的幫助? (請參閱編輯的代碼) –