diff options
author | Ito Kazumitsu <kaz@maczuka.gcd.org> | 2008-01-29 22:30:42 +0000 |
---|---|---|
committer | Ito Kazumitsu <kaz@maczuka.gcd.org> | 2008-01-29 22:30:42 +0000 |
commit | 1745554bbb5117a3bb9fbe3d90db73b112aa5ca4 (patch) | |
tree | 534743cdad2c703b551a7a5c3452eb0e3b941074 /java/io/ObjectOutputStream.java | |
parent | b3891c2b5980abfc7532ff9ef46e3539caab6cd2 (diff) | |
download | classpath-1745554bbb5117a3bb9fbe3d90db73b112aa5ca4.tar.gz |
2008-01-29 Ito Kazumitsu <kaz@maczuka.gcd.org>
Fixes bug #22941
* java/io/DataInputStream.java(readUTFLong): New method.
(readUTF): New private method.
* java/io/DataOutputStream.java(getUTFlength): Made package-private,
Return type changed to long.
(writeUTF): Use the new method writeUTFShort.
(writeUTFShort): New package-private method.
(writeUTFLong): New package-private method.
(writeUTFBytes): New private method.
* java/io/ObjectInputStream.java(parseContent): Separate the
handling of TC_LONGSTRING from TC_STRING.
* java/io/ObjectOutputStream.java(writeObject): When to write a
String, use writeUTFShort or writeUTFLong depending on the byte length.
Diffstat (limited to 'java/io/ObjectOutputStream.java')
-rw-r--r-- | java/io/ObjectOutputStream.java | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/java/io/ObjectOutputStream.java b/java/io/ObjectOutputStream.java index 5cb2a73f9..c09487536 100644 --- a/java/io/ObjectOutputStream.java +++ b/java/io/ObjectOutputStream.java @@ -1,5 +1,5 @@ /* ObjectOutputStream.java -- Class used to write serialized objects - Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -363,10 +363,22 @@ public class ObjectOutputStream extends OutputStream if (obj instanceof String) { - realOutput.writeByte(TC_STRING); - if (shared) - assignNewHandle(obj); - realOutput.writeUTF((String)obj); + String s = (String)obj; + long l = realOutput.getUTFlength(s, 0, 0); + if (l <= 65535) + { + realOutput.writeByte(TC_STRING); + if (shared) + assignNewHandle(obj); + realOutput.writeUTFShort(s, (int)l); + } + else + { + realOutput.writeByte(TC_LONGSTRING); + if (shared) + assignNewHandle(obj); + realOutput.writeUTFLong(s, l); + } break; } |