2

私は次のようなJavaクラスを持っています:

class Foo implements IBar
{
    // Methods ..

    // A bunch of fields of primitive types (int, String)
    int f1;
    int f2;
    String f3;
    // ...
}

これらすべてのフィールドをバイト配列にパックしたいと思います(理由は聞かないでください。この制限は、このような形式でデータを送信するC ++側によって導入されます)。

私が見つけた唯一の方法は、を使用することByteBufferです。しかし、それは私が考えることができる最悪です。コードは次のようになります。

ByteBuffer buf = ByteBuffer.allocate(4);

int offset = 0;

buf.putInt(f1);
System.arraycopy(buf.array(), 0, rawHeader, offset, 4);
offset += 4;

// A bunch of lines here (pack all other fields)

誰かがそれを行うためのより適切な方法を知っていますか?ありがとう。

4

2 に答える 2

4

DataOutputStreamラッピングを使用しByteArrayOutputStreamます。

または、必要に応じて、クラスを実装してラップ aSerializableを使用します。これはもちろん、バイト配列を Java だけが読み取れるようにします。ObjectOutputStreamByteArrayOutputStream

于 2012-12-14T15:27:04.953 に答える
2

うーん... を試すことができますDataOutputStreamByteBufferStreamプリミティブを記述するための便利なメソッドがあります。見返りとして、バイト配列があります。

UPD:もちろんそうではありませんByteBufferStreamByteArrayOutputStream

于 2012-12-14T15:28:32.210 に答える