Serialization/Deserialization doesn't work well with empty buffers.
-------------------------------------------------------------------

                 Key: COLLECTIONS-220
                 URL: http://issues.apache.org/jira/browse/COLLECTIONS-220
             Project: Commons Collections
          Issue Type: Bug
          Components: Buffer
    Affects Versions: 3.2
            Reporter: Jose Luis Huertas
            Priority: Minor
         Attachments: SerializationTest.java

When I serialize the queue to disk an it has elements, all works ok, but when I 
serialize an empty queue I have some problems when I create a new object using 
the serialized file.

When I deserialize the queue it has a 'buffer' with size 1 (with null content), 
'tail' and 'head' fields are 0 (they are declared transient). So, when I try to 
add a new object to the queue, the sentence:

 Object[] tmp = new Object[((buffer.length - 1) * 2) + 1];

Is executed in the add() method to increase the buffer length, but the buffer 
remains with the same size! (buffer.length = 1 --> (1 - 1) * 2 + 1 = 1). So, 
the object is added and when the tail is going to be incremented, it is reset 
to 0!! 

    private int increment(int index) {
        index++;
        if (index >= buffer.length) {
            index = 0;
        }
        return index;
    }


So it is impossible to add new elements after an empty queue has been 
serialized / deserialized.

I attach a simple TestCase where this is proved. The example works when you use 
XMLEncoder to serialize the buffer but doesn't work if you use 
ObjectOutputStream or XStream.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to