2011-08-16 12 views
0

最初の4バイトが特定の値を参照し、次の8がintを参照し、特定のデータ型の32ビットが続くことを示す仕様があります。 Javaでそのようなデータを読み取る最良の方法は何ですか?任意の標準的な方法はありますか私はちょうどあなたが本当にJavaでこれを実行する必要がある場合は、それぞれの位置によって相殺Javaの仕様を使用してバイナリデータをデコードする

答えて

4

あなたの最善の策を行うと移動して、それを読む必要がないことは、単純な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(); 
    } 
} 

このようなプロトコルストリームから直接読み込むときはエンディアンに注意してください。また、あなたの '特定のデータ型'が本当に何であるかに応じて、シリアライズ可能なサブタイプを宣言する必要があるかもしれません。

3

ストリームからプリミティブ型を読み取るには、DataInputStreamを使用して適切な型を順番に読み取ります。

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

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

ちょうど規則はすなわちint型は、符号付きまたは符号なしのようにされて、ストリームで使用されているか確認するために世話をします。これは、別の答えで示唆されているように、逆シリアル化メソッドで行うことができます。

関連する問題