Javaでオブジェクトをバイト配列に変換する
1. 概要
この短いチュートリアルでは、オブジェクトをバイト配列に
2. プレーンJavaを使用する
たとえば、Userクラスがあるとします。
public class User implements Serializable {
private String name;
@Override
public String toString() {
return "User{name=" + name + "}";
}
// getters and setters
}
ByteArrayOutputStreamおよびObjectOutputStreamオブジェクトを使用して、オブジェクトをバイト配列にシリアル化できます。
ストリームを閉じることを心配する必要がないように、try-with-resourcesを使用することを忘れないでください。
User user = new User();
user.setName("Josh");
try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos)) {
oos.writeObject(user);
}
次に、ByteArrayInputStreamとObjectInputStreamを使用して、受信したバイト配列をオブジェクトに逆シリアル化してから、最終的にUserにキャストします。
try (ByteArrayInputStream bis = new ByteArrayInputStream(data);
ObjectInputStream ois = new ObjectInputStream(bis)) {
User deserializedUser = (User) ois.readObject();
System.out.println(deserializedUser);
}
ユーザークラスはSerializableインターフェイスを実装する必要があることに注意してください。 それ以外の場合、上記のコードはNotSerializableExceptionをスローします。
3. ApacheCommonsLangを使用する
Apache CommonsLangライブラリのSerializationUtilsクラスを使用して、同じ目標を達成できます。
このクラスには、 serialize()という名前のメソッドがあります。このメソッドは、オブジェクトをバイト配列にシリアル化するために使用されます。
byte[] data = SerializationUtils.serialize(user);
そして、 deserialize()メソッドを使用して、バイト配列をオブジェクトに逆シリアル化します。
User deserializedUser = SerializationUtils.deserialize(data);
上記のメソッドにはSerializableタイプのパラメーターがあります。したがって、 User クラスは、プレーンJavaの例と同様に、Serializableインターフェースを実装する必要があります。
4. SpringFrameworkのSerializationUtilsクラスを使用する
最後に、プロジェクトですでにSpring Frameworkを使用している場合は、org.springframework.utilパッケージのSerializationUtilsクラスを使用できます。 メソッド名は、ApacheCommonsLangライブラリのメソッド名と同じです。
まず、Userオブジェクトをバイト配列にシリアル化できます。
byte[] data = SerializationUtils.serialize(user);
そして、結果を逆シリアル化してUserオブジェクトに戻すことができます。
User deserializedUser = SerializationUtils.deserialize(data);
通常どおり、UserクラスはSerializableインターフェイスを実装する必要があります。そうしないと、上記のコードを実行したときにNotSerializableExceptionが発生します。
5. 結論
要約すると、オブジェクトをバイト配列に