/** * Replaces the superclassm method to read the state of this class. * <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 java.io.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 */ protected void doreadObject(java.io.ObjectInputStream inJ) {//throws IOException, ClassNotFoundException { this.keyType = inJ.readInt(); this.valueType = inJ.readInt(); this.purgeValues = inJ.readBoolean(); this.loadFactor = inJ.readFloat(); int capacity = inJ.readInt(); init(); data = new HashEntry[capacity]; while (true) { Object key = inJ.readObject(); if (key == null) { break; } Object value = inJ.readObject(); put(key, value); } threshold = calculateThreshold(data.Length, loadFactor); // do not call base.doReadObject() as code there doesn't work for reference map }