harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Spark Shen <smallsmallor...@gmail.com>
Subject Re: [classlib][luni] Strange serialized form of java.util.TreeMap (re JIRA harmony-1066)
Date Tue, 08 Aug 2006 08:13:34 GMT
Hi, thank you for your information.

I slightly modified my second test case and run it on JDK6-beta.

public void test_HeadMap_Serializable() throws Exception {
// same as before

*assertNotNull(((SortedMap)outputObject).entrySet()); // This line 
assertNull previously.*

assertNotNull(((SortedMap)outputObject).keySet());

assertNotNull(((SortedMap)outputObject).values());

*assertEquals(outputObject, headMap); // This line is previously 
commented out, and now passes on JDK6.*
}
IMO, this shows that Inner classes of TreeMap on JDK5 do not have proper 
serialization behavior. Shall we follow RI on this odd behavior in harmony?
Personally, I am against this.

Best regards

Oleg Khaschansky 写道:
> Hi,
>
> Take a look at this: 
> http://download.java.net/jdk6/docs/api/serialized-form.html
> Maybe this document will give you an idea of what are those inner
> classes... Of cause, in the new release serialized form may have
> changed.
>
> -- 
> Oleg
>
> On 8/7/06, Spark Shen <smallsmallorgan@gmail.com> wrote:
>> Hi:
>> This is a long post, thanks for your patient to read it through :-)
>>
>> I wrote a test case as below:
>> public void test_SubMap_Serializable() throws Exception {
>> TreeMap<Integer, Double> map = new TreeMap<Integer, Double>();
>> map.put(1, 2.1);
>> map.put(2, 3.1);
>> map.put(3, 4.5);
>> map.put(7, 21.3);
>> SortedMap<Integer, Double> headMap = map.headMap(3);
>> assertTrue(headMap instanceof Serializable);
>> assertFalse(headMap instanceof TreeMap);
>> assertTrue(headMap instanceof SortedMap);
>> }
>> Which says the returned headMap is not a TreeMap but a serializable
>> SortedMap.
>>
>> IIRC, there are three mysterious serialized form immediately following
>> the serialized form of java.util.TreeMap. They are
>>
>> Class **java.util.TreeMap$1** extends Object implements Serializable
>>
>> Class **java.util.TreeMap$2** extends Object implements Serializable
>>
>> Class **java.util.TreeMap$3** extends Object implements Serializable
>>
>> respectively. This gives a hint that there are three inner classes of
>> TreeMap which should be serializable.
>> But what are they indeed?
>> IMHO, the returned SortedMap may
>> be one of the java.util.TreeMap$x classes. What is your opinion? (I
>> raised JIRA-1066 for this)
>>
>> The above test case suggests me to make the returned SortedMap
>> serializable. But, I have another concern:
>> SortedMap returned by TreeMap is not a public class(does not have a
>> documented Serialized form), and the serialization behavior of this
>> SortedMap is strange. See the test case below:
>> public void test_HeadMap_Serializable() throws Exception {
>> TreeMap<Integer, Double> map = new TreeMap<Integer, Double>();
>> map.put(1, 2.1);
>> map.put(2, 3.1);
>> map.put(3, 4.5);
>> map.put(7, 21.3);
>> SortedMap<Integer, Double> headMap = map.headMap(3);
>> assertTrue(headMap instanceof Serializable);
>> assertFalse(headMap instanceof TreeMap);
>> assertTrue(headMap instanceof SortedMap);
>>
>> // Write the SortedMap out and read it back.
>> ByteArrayOutputStream bos = new ByteArrayOutputStream();
>> ObjectOutputStream oos = new ObjectOutputStream(bos);
>> oos.writeObject(headMap);
>> oos.close();
>>
>> ByteArrayInputStream bis = new
>> ByteArrayInputStream(bos.toByteArray());
>> ObjectInputStream ois = new ObjectInputStream(bis);
>> Object outputObject = (Object) ois.readObject();
>>
>> *assertNull(((SortedMap)outputObject).entrySet());
>>
>> assertNotNull(((SortedMap)outputObject).keySet());
>>
>> assertNotNull(((SortedMap)outputObject).values());
>>
>> * *// assertEquals(outputObject, headMap);*
>> }
>>
>> The commented out assertion will throw out a NullPointerException, and
>> the entrySet of the SortedMap is Null while keySet and values are not.
>> This is strange. Do we need to follow RI to make the returned SortedMap
>> serializable like this?
>>
>> Best regards
>>
>> -- 
>> Spark Shen
>> China Software Development Lab, IBM
>>
>>
>>
>> ---------------------------------------------------------------------
>> Terms of use : http://incubator.apache.org/harmony/mailing.html
>> To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
>> For additional commands, e-mail: harmony-dev-help@incubator.apache.org
>>
>>
>
> ---------------------------------------------------------------------
> Terms of use : http://incubator.apache.org/harmony/mailing.html
> To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
> For additional commands, e-mail: harmony-dev-help@incubator.apache.org
>
>


-- 
Spark Shen
China Software Development Lab, IBM



---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
For additional commands, e-mail: harmony-dev-help@incubator.apache.org


Mime
View raw message