[jira] [Updated] (COLLECTIONS-220) Serialization/Deserialization doesn't work well with empty buffers.

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

[jira] [Updated] (COLLECTIONS-220) Serialization/Deserialization doesn't work well with empty buffers.

Phil Steitz (Jira)

     [ https://issues.apache.org/jira/browse/COLLECTIONS-220?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Thomas Neidhart updated COLLECTIONS-220:

    Fix Version/s:     (was: 4.0)

> Serialization/Deserialization doesn't work well with empty buffers.
> -------------------------------------------------------------------
>                 Key: COLLECTIONS-220
>                 URL: https://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: ASF.LICENSE.NOT.GRANTED--SerializationTest.java, COLLECTIONS-200.patch, COLLECTIONS-220.patch
> 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, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira