社区的问候,我最近在我的 java 项目中遇到了序列化和反序列化的问题。我有一个 包含其他对象作为字段的类的对象。
我想将对象的状态存储到一个字节数组中,然后反序列化字节数组并取回原始对象。但是,组成我的对象字段的对象不是可序列化的(来自第三方库)所以必须声明它们首先是瞬态。
现在我的对象被序列化和反序列化,但正如预期的那样,由于我之前提到的瞬态声明,它的字段为空。我试图在我的序列化类中本地创建所有元素并为它们分配原始值并继续过程,但它没有任何区别。我在下面引用我的部分代码,有什么想法吗?预先感谢:)
这是我的对象的类及其字段
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;
}