summaryrefslogtreecommitdiff
path: root/java/io/ObjectOutputStream.java
diff options
context:
space:
mode:
authorIto Kazumitsu <kaz@maczuka.gcd.org>2008-01-29 22:30:42 +0000
committerIto Kazumitsu <kaz@maczuka.gcd.org>2008-01-29 22:30:42 +0000
commit1745554bbb5117a3bb9fbe3d90db73b112aa5ca4 (patch)
tree534743cdad2c703b551a7a5c3452eb0e3b941074 /java/io/ObjectOutputStream.java
parentb3891c2b5980abfc7532ff9ef46e3539caab6cd2 (diff)
downloadclasspath-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.java22
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;
}