コミュニティにご挨拶、私は最近、Javaプロジェクトの直列化と非直列化の問題を思いつきました。私はオブジェクトのクラスを他のオブジェクトをフィールドとしています。Javaオブジェクトを直列化できないシリアルオブジェクトのフィールドをバイト配列にシリアル化し、元のオブジェクトを取得するために配列を逆シリアル化する
私は店バイト配列にオブジェクトの状態と、その後バイト配列をデシリアライズし、元のオブジェクト .Howeverを取り戻すしたいと思い、私のオブジェクトのフィールドを構成するオブジェクトはSerializableでない(第三から来ましたパーティー・ライブラリー)は、最初にトランジェントとして宣言しなければなりませんでした。
私のオブジェクトはシリアライズされ、デシリアライズされていますが、期待されていたように、前に述べた一時的な宣言のためにフィールドがヌルです。私はシリアライゼーションクラスにすべての要素をローカルに作成し、値を変更してプロセスを続行しましたが、違いはありませんでした。私は私のコードの一部の下で引用します。それはここではフィールド
public class AbePublicKey implements java.io.Serializable{
private static final long serialVersionUID = 7526472295622776147L;
public transient Element g;
public transient Element h;
public transient Element f;
public transient Element e_g_g_hat_alpha;
}
だと感謝を事前にここで:)
は私のオブジェクトのクラスである私のシリアライザ機能が
public byte[] PublicKeytoByteArray(AbePublicKey publickey) throws IOException {
KeyAuthority keyauthority = new KeyAuthority();
byte[] bytes = null;
ByteArrayOutputStream bos = null;
ObjectOutputStream oos = null;
publickey.setElements(g, h, f, e_g_g_hat_alpha);
try {
bos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(bos);
oos.writeObject(publickey);
oos.flush();
bytes = bos.toByteArray();
} finally {
if (oos != null)
oos.close();
}
if (bos != null) {
bos.close();
}
}
return bytes;
}
であるここに私のデシリアライザ機能が
public static AbePublicKey PublicKeyBytestoObject(byte[] publickeybytes) throws IOException, ClassNotFoundException {
AbePublicKey obj = null;
ByteArrayInputStream bis = null;
ObjectInputStream ois = null;
try {
bis = new ByteArrayInputStream(publickeybytes);
ois = new ObjectInputStream(bis);
obj = (AbePublicKey) ois.readObject();
} finally {
if (bis != null) {
bis.close();
}
if (ois != null) {
ois.close();
}
}
return obj;
}
[Javaカスタムシリアル化]の可能な複製(http://stackoverflow.com/questions/7290777/java-custom-serialization) – sidgate