Esempio n. 1
0
        /**
         * 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
        }