0
我想擁有可串行化的引用,它只能在單個機器內運行。如何序列化/反序列化Java中的引用?
這種類型的對象,被設置爲引用和序列化,然後反序列化,應該引用與序列化之前完全相同的對象。
明顯的解決方案我做:
public class ReferenceSerializable<T> implements Serializable {
public static final DataFormat REFERENCE = new DataFormat("application/prs.reference");
private static Int2ObjectOpenHashMap<WeakReference<Object>> map = new Int2ObjectOpenHashMap<>();
private T referent;
private int identity;
public ReferenceSerializable(T referent) {
this.referent = referent;
identity = System.identityHashCode(referent);
if(!map.containsKey(identity)) {
map.put(identity, new WeakReference<Object>(referent));
}
}
private void writeObject(java.io.ObjectOutputStream out) throws IOException {
out.writeInt(identity);
}
private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
identity = in.readInt();
referent = (T) map.get(identity).get();
if(referent == null) {
throw new IllegalStateException("Object does not exist anymore, reference is obsolete");
}
}
}
是否有可能實現其他辦法嗎?
真的很難理解你要求什麼。請嘗試自己閱讀並添加更多信息並重新編寫它 – Divers
也許使用一些代碼來顯示什麼是什麼以及需要序列化的內容。 – user1803551
你可以通過'readResolve()'方法實現它。 – EJP