私はここでコード(Java Serializable Object to Byte Array)とSerializationUtils.serialize()を試しましたが、オブジェクトをシリアル化すると、オブジェクトに格納されているバイト数よりもずっと多くのバイトが得られます。Java:できるだけ少ない出力バイトでオブジェクトをバイト配列にシリアル化する方法は?
例えば、SerializationUtils.serialize(新しいバイト[1])を実行すると、入力オブジェクトが1バイトの間に長さ28の出力バイト配列を取得できます。私は
public class MyClass {
public byte[] a;
public MyClass(byte[] a) {
this.a = a;
}
}
のようなクラスを持っている場合は同様に、私はオブジェクトを作成
MyClass obj = new MyClass(new byte[1]);
私が行うとSerializationUtils.serialize(OBJ)、私ははるかに長い1
より出力バイト配列を取得します私のプログラムで実際にやっていることは、2つのパーティ間でオブジェクトの配列を送信していることです。最初に、このオブジェクトの配列を1バイト配列にシリアル化してから送信します。しかし、SerializationUtils.serialize(MyClass [] obj)はobjが実際に格納するバイト数よりも多くのバイトを持つ配列を出力し、通信の帯域幅を増やします。
私はまた、メモリコピーを実行して、オブジェクトの配列から単一のバイト配列を自分で作成してみました:(MyClassの[] OBJ
MyClass[] obj = new MyClass[5];
for (int i=0; i<5; i++)
obj[i] = new MyClass(new byte[1]);
byte[] msg = new byte[5];
for (int i=0; i<obj.length; i++)
System.arraycopy(obj[i].a, 0, msg, i, 1);
しかし、これはSerializationUtils.serializeほど効率的ではないようです)でも、SerializationUtils.serialize(MyClass [] obj)によって、私が持っているmsgより多くのバイトが生成されます。
Javaにはいくつかの方法があります。オブジェクト/オブジェクトの配列を効率的にシリアル化し、出力バイト配列をできるだけ短くすることができますか?
ありがとうございます。