我有一個Java類Java數據類型到字節數組
public class MsgLayout{
int field1;
String field2;
long field3;
}
我必須寫此對象在插座輸出流的字節數組。三個字段(實例變量)具有佈局。即field1
必須佔用1個字節,field2
必須佔用4個字節,而field3
必須佔用8個字節。
ByteBuffer bbf = ByteBuffer.allocate(TOTAL_SIZE);
bbf.put(Integer.toString(this.getField1()).getBytes(), 0, FIELD1_SIZE);
bbf.position(FIELD2_OFFSET);
bbf.put(Long.toString(this.getField2()).getBytes(), 0, FIELD2_SIZE);
bbf.position(FIELD3_OFFSET);
bbf.put(Long.toString(this.getField3()).getBytes(), 0, FIELD3_SIZE);
byte[] msg = bbf.array();
使用上面的代碼,我試圖根據其所需的大小來適應字節數組中的每個字段。但我得到IndexOutOfBoundException
總之,問題是如何適應佈局定義大小的字段。例如FIELD1_OFFSET = 0, FIELD1_SIZE=1, FIELD2_OFFSET=1, FIELD2_SIZE=4, FIELD3_OFFSET=5, FIELD3_SIZE=8.
現在,當我將field1
轉換爲字符串時,轉換爲byte []時不適合1字節。如果我不轉換爲字符串,並使用putInt(int)它將4個字節寫入結果字節數組。
除非您可以保證字段的範圍,否則嘗試將它們存儲到緩衝區中過小的固定大小插槽時將丟失數據。你打算如何解決這個問題? – kdgregory
你是什麼意思的範圍?我不能在一個字節中插入Integer嗎?我不能以4字節存儲字符串嗎? –
@ hoshang.varshney,Java中沒有int是4個字節,String是可變長度。當你說字符串是你想到一個字符,即一個字符?在Java中,由於使用unicode,所以單個字符佔用2個字節。 –