From: Michael Koch Date: Wed, 25 Jun 2003 06:31:59 +0000 (+0000) Subject: 2003-06-25 Michael Koch X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3cc9a95d27f700508a686b8414dcffff9b4d75e9;p=gcc.git 2003-06-25 Michael Koch * java/io/ObjectInputStream.java (readClassDescriptor): New method. (readObject): Moved functionality to readClassDescriptor(). * java/io/ObjectOutputStream.java (writeClassDescriptor): New method. (writeObject): Moved functionality to writeClassDescriptor(). From-SVN: r68465 --- diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 02bb5b7b8b8..3593202c58d 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,12 @@ +2003-06-25 Michael Koch + + * java/io/ObjectInputStream.java + (readClassDescriptor): New method. + (readObject): Moved functionality to readClassDescriptor(). + * java/io/ObjectOutputStream.java + (writeClassDescriptor): New method. + (writeObject): Moved functionality to writeClassDescriptor(). + 2003-06-25 Michael Koch * javax/swing/plaf/basic/BasicListUI.java, diff --git a/libjava/java/io/ObjectInputStream.java b/libjava/java/io/ObjectInputStream.java index e3e2412967f..ef79727c1e1 100644 --- a/libjava/java/io/ObjectInputStream.java +++ b/libjava/java/io/ObjectInputStream.java @@ -219,44 +219,7 @@ public class ObjectInputStream extends InputStream case TC_CLASSDESC: { - dumpElement ("CLASSDESC NAME="); - String name = this.realInputStream.readUTF (); - dumpElement (name + "; UID="); - long uid = this.realInputStream.readLong (); - dumpElement (Long.toHexString(uid) + "; FLAGS="); - byte flags = this.realInputStream.readByte (); - dumpElement (Integer.toHexString(flags) + "; FIELD COUNT="); - short field_count = this.realInputStream.readShort (); - dumpElementln (Short.toString(field_count)); - ObjectStreamField[] fields = new ObjectStreamField[field_count]; - ObjectStreamClass osc = new ObjectStreamClass (name, uid, - flags, fields); - assignNewHandle (osc); - - for (int i=0; i < field_count; i++) - { - dumpElement (" TYPE CODE="); - char type_code = (char)this.realInputStream.readByte (); - dumpElement (type_code + "; FIELD NAME="); - String field_name = this.realInputStream.readUTF (); - dumpElementln (field_name); - String class_name; - - if (type_code == 'L' || type_code == '[') - class_name = (String)readObject (); - else - class_name = String.valueOf (type_code); - - // There're many cases you can't get java.lang.Class from - // typename if your context class loader can't load it, - // then use typename to construct the field - fields[i] = - new ObjectStreamField (field_name, class_name); - } - - boolean oldmode = setBlockDataMode (true); - osc.setClass (resolveClass (osc)); - setBlockDataMode (oldmode); + ObjectStreamClass osc = readClassDescriptor (); if (!is_consumed) { @@ -451,6 +414,51 @@ public class ObjectInputStream extends InputStream return ret_val; } + protected ObjectStreamClass readClassDescriptor () + throws ClassNotFoundException, IOException + { + dumpElement ("CLASSDESC NAME="); + String name = this.realInputStream.readUTF (); + dumpElement (name + "; UID="); + long uid = this.realInputStream.readLong (); + dumpElement (Long.toHexString(uid) + "; FLAGS="); + byte flags = this.realInputStream.readByte (); + dumpElement (Integer.toHexString(flags) + "; FIELD COUNT="); + short field_count = this.realInputStream.readShort (); + dumpElementln (Short.toString(field_count)); + ObjectStreamField[] fields = new ObjectStreamField[field_count]; + ObjectStreamClass osc = new ObjectStreamClass (name, uid, + flags, fields); + assignNewHandle (osc); + + for (int i=0; i < field_count; i++) + { + dumpElement (" TYPE CODE="); + char type_code = (char)this.realInputStream.readByte (); + dumpElement (type_code + "; FIELD NAME="); + String field_name = this.realInputStream.readUTF (); + dumpElementln (field_name); + String class_name; + + if (type_code == 'L' || type_code == '[') + class_name = (String)readObject (); + else + class_name = String.valueOf (type_code); + + // There're many cases you can't get java.lang.Class from + // typename if your context class loader can't load it, + // then use typename to construct the field + fields[i] = + new ObjectStreamField (field_name, class_name); + } + + boolean oldmode = setBlockDataMode (true); + osc.setClass (resolveClass (osc)); + setBlockDataMode (oldmode); + + return osc; + } + /** * Reads the current objects non-transient, non-static fields from * the current class from the underlying output stream. diff --git a/libjava/java/io/ObjectOutputStream.java b/libjava/java/io/ObjectOutputStream.java index cb461231b33..da01b57ba8d 100644 --- a/libjava/java/io/ObjectOutputStream.java +++ b/libjava/java/io/ObjectOutputStream.java @@ -224,46 +224,7 @@ public class ObjectOutputStream extends OutputStream } if (obj instanceof ObjectStreamClass) - { - ObjectStreamClass osc = (ObjectStreamClass)obj; - realOutput.writeByte (TC_CLASSDESC); - realOutput.writeUTF (osc.getName ()); - realOutput.writeLong (osc.getSerialVersionUID ()); - assignNewHandle (obj); - - int flags = osc.getFlags (); - - if (protocolVersion == PROTOCOL_VERSION_2 - && osc.isExternalizable ()) - flags |= SC_BLOCK_DATA; - - realOutput.writeByte (flags); - - ObjectStreamField[] fields = osc.fields; - realOutput.writeShort (fields.length); - - ObjectStreamField field; - for (int i=0; i < fields.length; i++) - { - field = fields[i]; - realOutput.writeByte (field.getTypeCode ()); - realOutput.writeUTF (field.getName ()); - - if (! field.isPrimitive ()) - writeObject (field.getTypeString ()); - } - - boolean oldmode = setBlockDataMode (true); - annotateClass (osc.forClass ()); - setBlockDataMode (oldmode); - realOutput.writeByte (TC_ENDBLOCKDATA); - - if (osc.isSerializable ()) - writeObject (osc.getSuper ()); - else - writeObject (null); - break; - } + writeClassDescriptor ((ObjectStreamClass) obj); if ((replacementEnabled || obj instanceof Serializable) && ! replaceDone) @@ -406,6 +367,46 @@ public class ObjectOutputStream extends OutputStream } } + protected void writeClassDescriptor (ObjectStreamClass osc) throws IOException + { + realOutput.writeByte (TC_CLASSDESC); + realOutput.writeUTF (osc.getName ()); + realOutput.writeLong (osc.getSerialVersionUID ()); + assignNewHandle (osc); + + int flags = osc.getFlags (); + + if (protocolVersion == PROTOCOL_VERSION_2 + && osc.isExternalizable ()) + flags |= SC_BLOCK_DATA; + + realOutput.writeByte (flags); + + ObjectStreamField[] fields = osc.fields; + realOutput.writeShort (fields.length); + + ObjectStreamField field; + for (int i=0; i < fields.length; i++) + { + field = fields[i]; + realOutput.writeByte (field.getTypeCode ()); + realOutput.writeUTF (field.getName ()); + + if (! field.isPrimitive ()) + writeObject (field.getTypeString ()); + } + + boolean oldmode = setBlockDataMode (true); + annotateClass (osc.forClass ()); + setBlockDataMode (oldmode); + realOutput.writeByte (TC_ENDBLOCKDATA); + + if (osc.isSerializable ()) + writeObject (osc.getSuper ()); + else + writeObject (null); + } + /** Writes the current objects non-transient, non-static fields from the current class to the underlying output stream.