harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Oleg Khaschansky" <oleg.v.khaschan...@gmail.com>
Subject Re: [classlib][luni] Strange serialized form of java.util.TreeMap (re JIRA harmony-1066)
Date Tue, 08 Aug 2006 08:41:47 GMT
> Shall we follow RI on this odd behavior in harmony?

My opinion is that we should not. But if 1.5 has deserialization issue
it won't be possible to make it read SubMap, serialized by harmony,
correctly. And I think this it's not a problem for us.

On 8/8/06, Spark Shen <smallsmallorgan@gmail.com> wrote:
> 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
>
>

---------------------------------------------------------------------
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