2011-08-16 55 views
0

我有一個規範,它告訴前四個字節指向一個特定的值,接下來的8個指向一個int,然後是32位,用於說特定的數據類型。 在java中讀取這些數據的最佳方式是什麼?有沒有什麼標準的辦法還是我只需要通過移動由各自的位置使用java中的規範解碼二進制數據

回答

4

你最好的選擇讀它,如果你真的需要做到這一點在Java中是創建一個簡單的DTO與自定義序列化。根據您的協議格式定義它的字段,並從字節流中讀取它自己。例如:

public class ProtocolDTO implements Serializiable { 
    private int specificValue; 
    private long anInt; 
    private int particularDataType; 

    // Constructors, Accessors 

    private void readObject(ObjectInputStream in) 
    throws IOException, ClassNotFoundException { 
     specificValue = in.readInt(); 
     anInt = in.readLong(); 
     particularDataType = in.readInt(); 
    } 
} 

從這樣的協議流直接讀取時,要小心端到端性。此外,您可能需要聲明可序列化的子類型,具體取決於'particularDataType'的真正含義。

3

要從流中讀取原始類型,請使用DataInputStream並按順序讀取適當的類型。

http://download.oracle.com/javase/1.4.2/docs/api/java/io/DataInputStream.html

int i1 = stream.readInt(); 
long l1 = stream.readLong(); 

只是照顧驗證流中使用什麼樣的約定,即是整數符號或無符號的等。這可以在另一個答案中建議的反序列化方法中完成。