Ich möchte eine serialisierbare Referenz haben, die nur innerhalb einer einzelnen Maschine funktioniert.Wie serialisieren/deserialisieren Referenz in Java?
Eine solche Objektart, die auf referenziert und serialisiert und anschließend deserialisiert wird, sollte genau dasselbe Objekt referenzieren wie vor der Serialisierung. Ich
Offensichtliche Lösung gemacht:
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");
}
}
}
Ist es möglich, auf andere Weise zu implementieren?
Es ist wirklich schwer zu verstehen, wonach Sie fragen. Bitte versuchen Sie, es selbst zu lesen und fügen Sie weitere Informationen hinzu und formulieren Sie es um. – Divers
Vielleicht verwenden Sie einen Code, um zu zeigen, was was ist und was serialisiert werden muss. – user1803551
Sie können dies über die 'readResolve()' Methode implementieren. – EJP