src/main/java/org/jivesoftware/smack/util/collections/AbstractHashedMap.java
protected void doReadObject(ObjectInputStream in) throws IOException,
            ClassNotFoundException {
        loadFactor = in.readFloat();
        int capacity = in.readInt();
        int size = in.readInt();
        init();
        data = new HashEntry[capacity];
        for (int i = 0; i < size; i++) {
            K key = (K) in.readObject();
            V value = (V) in.readObject();
            put(key, value);
        }
        threshold = calculateThreshold(data.length, loadFactor);
    }
protected void doReadObject(ObjectInputStream in) throws IOException,
            ClassNotFoundException {
        loadFactor = in.readFloat();
        int capacity = in.readInt();
        int size = in.readInt();
        init();
        data = new HashEntry[capacity];
        for (int i = 0; i < size; i++) {
            K key = (K) in.readObject();
            V value = (V) in.readObject();
            put(key, value);
        }
        threshold = calculateThreshold(data.length, loadFactor);
    }
Reads the map data from the stream. This method must be overridden if a
subclass must be setup before <code>put()</code> is used.
<p/>
Serialization is not one of the JDK's nicest topics. Normal serialization
will initialise the superclass before the subclass. Sometimes however,
this isn't what you want, as in this case the <code>put()</code> method
on read can be affected by subclass state.
<p/>
The solution adopted here is to deserialize the state data of this class
in this protected method. This method must be called by the
<code>readObject()</code> of the first serializable subclass.
<p/>
Subclasses may override if the subclass has a specific field that must be
present before <code>put()</code> or <code>calculateThreshold()</code>
will work correctly.

@param in
the input stream