[COLLECTIONS-285] Add serialization support for TreeBidiMap, thanks to Christian Gruenberg.
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/collections/trunk@1469020 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
f7a557a38a
commit
2067c96f3f
|
@ -22,6 +22,9 @@
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<release version="4.0" date="TBA" description="Next release">
|
<release version="4.0" date="TBA" description="Next release">
|
||||||
|
<action issue="COLLECTIONS-285" dev="tn" type="add" due-to="Christian Gruenberg">
|
||||||
|
Added serialization support for "TreeBidiMap".
|
||||||
|
</action>
|
||||||
<action issue="COLLECTIONS-452" dev="tn" type="update">
|
<action issue="COLLECTIONS-452" dev="tn" type="update">
|
||||||
Change base package to org.apache.commons.collections4.
|
Change base package to org.apache.commons.collections4.
|
||||||
</action>
|
</action>
|
||||||
|
|
|
@ -16,6 +16,10 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.commons.collections4.bidimap;
|
package org.apache.commons.collections4.bidimap;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.ObjectInputStream;
|
||||||
|
import java.io.ObjectOutputStream;
|
||||||
|
import java.io.Serializable;
|
||||||
import java.util.AbstractSet;
|
import java.util.AbstractSet;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.ConcurrentModificationException;
|
import java.util.ConcurrentModificationException;
|
||||||
|
@ -69,12 +73,11 @@ import static org.apache.commons.collections4.bidimap.TreeBidiMap.DataElement.VA
|
||||||
* not allow setValue() and will throw an
|
* not allow setValue() and will throw an
|
||||||
* UnsupportedOperationException on attempts to call that method.
|
* UnsupportedOperationException on attempts to call that method.
|
||||||
*
|
*
|
||||||
* TODO: serialization does not work anymore
|
|
||||||
*
|
|
||||||
* @since 3.0 (previously DoubleOrderedMap v2.0)
|
* @since 3.0 (previously DoubleOrderedMap v2.0)
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
public class TreeBidiMap<K extends Comparable<K>, V extends Comparable<V>> implements OrderedBidiMap<K, V> {
|
public class TreeBidiMap<K extends Comparable<K>, V extends Comparable<V>>
|
||||||
|
implements OrderedBidiMap<K, V>, Serializable {
|
||||||
|
|
||||||
static enum DataElement {
|
static enum DataElement {
|
||||||
KEY("key"), VALUE("value");
|
KEY("key"), VALUE("value");
|
||||||
|
@ -96,13 +99,15 @@ public class TreeBidiMap<K extends Comparable<K>, V extends Comparable<V>> imple
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Node<K, V>[] rootNode;
|
private static final long serialVersionUID = 721969328361807L;
|
||||||
private int nodeCount = 0;
|
|
||||||
private int modifications = 0;
|
private transient Node<K, V>[] rootNode;
|
||||||
private Set<K> keySet;
|
private transient int nodeCount = 0;
|
||||||
private Set<V> valuesSet;
|
private transient int modifications = 0;
|
||||||
private Set<Map.Entry<K, V>> entrySet;
|
private transient Set<K> keySet;
|
||||||
private Inverse inverse = null;
|
private transient Set<V> valuesSet;
|
||||||
|
private transient Set<Map.Entry<K, V>> entrySet;
|
||||||
|
private transient Inverse inverse = null;
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
/**
|
/**
|
||||||
|
@ -1405,6 +1410,33 @@ public class TreeBidiMap<K extends Comparable<K>, V extends Comparable<V>> imple
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads the content of the stream.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked") // This will fail at runtime if the stream is incorrect
|
||||||
|
private void readObject(final ObjectInputStream stream) throws IOException, ClassNotFoundException{
|
||||||
|
stream.defaultReadObject();
|
||||||
|
rootNode = new Node[2];
|
||||||
|
int size = stream.readInt();
|
||||||
|
for(int i = 0; i < size; i++){
|
||||||
|
K k =(K) stream.readObject();
|
||||||
|
V v =(V) stream.readObject();
|
||||||
|
put(k, v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Writes the content to the stream for serialization.
|
||||||
|
*/
|
||||||
|
private void writeObject(final ObjectOutputStream stream) throws IOException{
|
||||||
|
stream.defaultWriteObject();
|
||||||
|
stream.writeInt(this.size());
|
||||||
|
for (final Entry<K, V> entry : entrySet()) {
|
||||||
|
stream.writeObject(entry.getKey());
|
||||||
|
stream.writeObject(entry.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
/**
|
/**
|
||||||
* A view of this map.
|
* A view of this map.
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue