Commit d9199663 by Mark Wielaard

ObjectInputStream.java: Reindent.

       * java/io/ObjectInputStream.java: Reindent.
       * java/io/ObjectOutputStream.java: Likewise.

From-SVN: r63614
parent 5793b276
2003-03-01 Mark Wielaard <mark@klomp.org>
* java/io/ObjectInputStream.java: Reindent.
* java/io/ObjectOutputStream.java: Likewise.
2003-02-28 Hans Boehm <Hans.Boehm@hp.com> 2003-02-28 Hans Boehm <Hans.Boehm@hp.com>
* java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Allocate a full * java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Allocate a full
jvalue for each argument. Simplify. jvalue for each argument. Simplify.
* testsuite/libjava.jni/calls.c (docall), * testsuite/libjava.jni/calls.c (docall),
testsuite/libjava.jni/calls.java (longpb_f): check for argument testsuite/libjava.jni/calls.java (longpb_f): check for argument
misalignment. misalignment.
......
...@@ -7,7 +7,7 @@ GNU Classpath is free software; you can redistribute it and/or modify ...@@ -7,7 +7,7 @@ GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option) the Free Software Foundation; either version 2, or (at your option)
any later version. any later version.
GNU Classpath is distributed in the hope that it will be useful, but GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
...@@ -146,11 +146,11 @@ public class ObjectInputStream extends InputStream ...@@ -146,11 +146,11 @@ public class ObjectInputStream extends InputStream
is_consumed = true; is_consumed = true;
break; break;
} }
case TC_BLOCKDATA: case TC_BLOCKDATA:
case TC_BLOCKDATALONG: case TC_BLOCKDATALONG:
{ {
if (marker == TC_BLOCKDATALONG) if (marker == TC_BLOCKDATALONG)
dumpElementln ("BLOCKDATALONG"); dumpElementln ("BLOCKDATALONG");
else else
dumpElementln ("BLOCKDATA"); dumpElementln ("BLOCKDATA");
...@@ -164,7 +164,7 @@ public class ObjectInputStream extends InputStream ...@@ -164,7 +164,7 @@ public class ObjectInputStream extends InputStream
ret_val = null; ret_val = null;
break; break;
} }
case TC_REFERENCE: case TC_REFERENCE:
{ {
dumpElement ("REFERENCE "); dumpElement ("REFERENCE ");
...@@ -174,7 +174,7 @@ public class ObjectInputStream extends InputStream ...@@ -174,7 +174,7 @@ public class ObjectInputStream extends InputStream
this.objectLookupTable.get (oid)).object; this.objectLookupTable.get (oid)).object;
break; break;
} }
case TC_CLASS: case TC_CLASS:
{ {
dumpElementln ("CLASS"); dumpElementln ("CLASS");
...@@ -229,7 +229,6 @@ public class ObjectInputStream extends InputStream ...@@ -229,7 +229,6 @@ public class ObjectInputStream extends InputStream
short field_count = this.realInputStream.readShort (); short field_count = this.realInputStream.readShort ();
dumpElementln (Short.toString(field_count)); dumpElementln (Short.toString(field_count));
ObjectStreamField[] fields = new ObjectStreamField[field_count]; ObjectStreamField[] fields = new ObjectStreamField[field_count];
ObjectStreamClass osc = new ObjectStreamClass (name, uid, ObjectStreamClass osc = new ObjectStreamClass (name, uid,
flags, fields); flags, fields);
assignNewHandle (osc); assignNewHandle (osc);
...@@ -272,7 +271,7 @@ public class ObjectInputStream extends InputStream ...@@ -272,7 +271,7 @@ public class ObjectInputStream extends InputStream
ret_val = osc; ret_val = osc;
break; break;
} }
case TC_STRING: case TC_STRING:
case TC_LONGSTRING: case TC_LONGSTRING:
{ {
...@@ -357,9 +356,6 @@ public class ObjectInputStream extends InputStream ...@@ -357,9 +356,6 @@ public class ObjectInputStream extends InputStream
|| Modifier.isAbstract (first_nonserial.getModifiers ())) || Modifier.isAbstract (first_nonserial.getModifiers ()))
first_nonserial = first_nonserial.getSuperclass (); first_nonserial = first_nonserial.getSuperclass ();
// DEBUGln ("Using " + first_nonserial
// + " as starting point for constructing " + clazz);
Object obj = null; Object obj = null;
obj = newObject (clazz, first_nonserial); obj = newObject (clazz, first_nonserial);
...@@ -372,8 +368,6 @@ public class ObjectInputStream extends InputStream ...@@ -372,8 +368,6 @@ public class ObjectInputStream extends InputStream
ObjectStreamClass[] hierarchy = ObjectStreamClass[] hierarchy =
ObjectStreamClass.getObjectStreamClasses (clazz); ObjectStreamClass.getObjectStreamClasses (clazz);
// DEBUGln ("Got class hierarchy of depth " + hierarchy.length);
boolean has_read; boolean has_read;
for (int i=0; i < hierarchy.length; i++) for (int i=0; i < hierarchy.length; i++)
{ {
...@@ -428,13 +422,13 @@ public class ObjectInputStream extends InputStream ...@@ -428,13 +422,13 @@ public class ObjectInputStream extends InputStream
ret_val = processResolution (obj, handle); ret_val = processResolution (obj, handle);
break; break;
} }
case TC_RESET: case TC_RESET:
dumpElementln ("RESET"); dumpElementln ("RESET");
clearHandles (); clearHandles ();
ret_val = readObject (); ret_val = readObject ();
break; break;
case TC_EXCEPTION: case TC_EXCEPTION:
{ {
dumpElement ("EXCEPTION="); dumpElement ("EXCEPTION=");
...@@ -443,10 +437,9 @@ public class ObjectInputStream extends InputStream ...@@ -443,10 +437,9 @@ public class ObjectInputStream extends InputStream
clearHandles (); clearHandles ();
throw new WriteAbortedException ("Exception thrown during writing of stream", e); throw new WriteAbortedException ("Exception thrown during writing of stream", e);
} }
default: default:
throw new IOException ("Unknown marker on stream: " + marker); throw new IOException ("Unknown marker on stream: " + marker);
} }
} }
finally finally
...@@ -464,7 +457,6 @@ public class ObjectInputStream extends InputStream ...@@ -464,7 +457,6 @@ public class ObjectInputStream extends InputStream
return ret_val; return ret_val;
} }
/** /**
Reads the current objects non-transient, non-static fields from Reads the current objects non-transient, non-static fields from
...@@ -665,11 +657,11 @@ public class ObjectInputStream extends InputStream ...@@ -665,11 +657,11 @@ public class ObjectInputStream extends InputStream
public int read () throws IOException public int read () throws IOException
{ {
if (this.readDataFromBlock) if (this.readDataFromBlock)
{ {
if (this.blockDataPosition >= this.blockDataBytes) if (this.blockDataPosition >= this.blockDataBytes)
readNextBlock (); readNextBlock ();
return (this.blockData[this.blockDataPosition++] & 0xff); return (this.blockData[this.blockDataPosition++] & 0xff);
} }
else else
return this.realInputStream.read (); return this.realInputStream.read ();
} }
...@@ -677,26 +669,26 @@ public class ObjectInputStream extends InputStream ...@@ -677,26 +669,26 @@ public class ObjectInputStream extends InputStream
public int read (byte[] data, int offset, int length) throws IOException public int read (byte[] data, int offset, int length) throws IOException
{ {
if (this.readDataFromBlock) if (this.readDataFromBlock)
{ {
if (this.blockDataPosition + length > this.blockDataBytes) if (this.blockDataPosition + length > this.blockDataBytes)
{ {
int remain = this.blockDataBytes - this.blockDataPosition; int remain = this.blockDataBytes - this.blockDataPosition;
if (remain != 0) if (remain != 0)
{ {
System.arraycopy (this.blockData, this.blockDataPosition, System.arraycopy (this.blockData, this.blockDataPosition,
data, offset, remain); data, offset, remain);
offset += remain; offset += remain;
length -= remain; length -= remain;
} }
readNextBlock (); readNextBlock ();
} }
System.arraycopy (this.blockData, this.blockDataPosition, System.arraycopy (this.blockData, this.blockDataPosition,
data, offset, length); data, offset, length);
blockDataPosition += length; this.blockDataPosition += length;
return length; return length;
} }
else else
return this.realInputStream.read (data, offset, length); return this.realInputStream.read (data, offset, length);
} }
...@@ -704,12 +696,12 @@ public class ObjectInputStream extends InputStream ...@@ -704,12 +696,12 @@ public class ObjectInputStream extends InputStream
public int available () throws IOException public int available () throws IOException
{ {
if (this.readDataFromBlock) if (this.readDataFromBlock)
{ {
if (this.blockDataPosition >= this.blockDataBytes) if (this.blockDataPosition >= this.blockDataBytes)
readNextBlock (); readNextBlock ();
return this.blockDataBytes - this.blockDataPosition; return this.blockDataBytes - this.blockDataPosition;
} }
else else
return this.realInputStream.available (); return this.realInputStream.available ();
} }
...@@ -864,174 +856,174 @@ public class ObjectInputStream extends InputStream ...@@ -864,174 +856,174 @@ public class ObjectInputStream extends InputStream
setBlockDataMode (oldmode); setBlockDataMode (oldmode);
return new GetField () return new GetField ()
{
public ObjectStreamClass getObjectStreamClass ()
{ {
return clazz; public ObjectStreamClass getObjectStreamClass ()
} {
return clazz;
}
public boolean defaulted (String name) public boolean defaulted (String name)
throws IOException, IllegalArgumentException throws IOException, IllegalArgumentException
{ {
return clazz.getField (name) == null; return clazz.getField (name) == null;
} }
public boolean get (String name, boolean defvalue) public boolean get (String name, boolean defvalue)
throws IOException, IllegalArgumentException throws IOException, IllegalArgumentException
{ {
ObjectStreamField field = getField (name, Boolean.TYPE); ObjectStreamField field = getField (name, Boolean.TYPE);
if (field == null) if (field == null)
return defvalue; return defvalue;
return prim_field_data[field.getOffset ()] == 0 ? false : true; return prim_field_data[field.getOffset ()] == 0 ? false : true;
} }
public char get (String name, char defvalue) public char get (String name, char defvalue)
throws IOException, IllegalArgumentException throws IOException, IllegalArgumentException
{ {
ObjectStreamField field = getField (name, Character.TYPE); ObjectStreamField field = getField (name, Character.TYPE);
if (field == null) if (field == null)
return defvalue; return defvalue;
int off = field.getOffset (); int off = field.getOffset ();
return (char)(((prim_field_data[off++] & 0xFF) << 8) return (char)(((prim_field_data[off++] & 0xFF) << 8)
| (prim_field_data[off] & 0xFF)); | (prim_field_data[off] & 0xFF));
} }
public byte get (String name, byte defvalue) public byte get (String name, byte defvalue)
throws IOException, IllegalArgumentException throws IOException, IllegalArgumentException
{ {
ObjectStreamField field = getField (name, Byte.TYPE); ObjectStreamField field = getField (name, Byte.TYPE);
if (field == null) if (field == null)
return defvalue; return defvalue;
return prim_field_data[field.getOffset ()]; return prim_field_data[field.getOffset ()];
} }
public short get (String name, short defvalue) public short get (String name, short defvalue)
throws IOException, IllegalArgumentException throws IOException, IllegalArgumentException
{ {
ObjectStreamField field = getField (name, Short.TYPE); ObjectStreamField field = getField (name, Short.TYPE);
if (field == null) if (field == null)
return defvalue; return defvalue;
int off = field.getOffset (); int off = field.getOffset ();
return (short)(((prim_field_data[off++] & 0xFF) << 8) return (short)(((prim_field_data[off++] & 0xFF) << 8)
| (prim_field_data[off] & 0xFF)); | (prim_field_data[off] & 0xFF));
} }
public int get (String name, int defvalue) public int get (String name, int defvalue)
throws IOException, IllegalArgumentException throws IOException, IllegalArgumentException
{ {
ObjectStreamField field = getField (name, Integer.TYPE); ObjectStreamField field = getField (name, Integer.TYPE);
if (field == null) if (field == null)
return defvalue; return defvalue;
int off = field.getOffset (); int off = field.getOffset ();
return ((prim_field_data[off++] & 0xFF) << 24) return ((prim_field_data[off++] & 0xFF) << 24)
| ((prim_field_data[off++] & 0xFF) << 16) | ((prim_field_data[off++] & 0xFF) << 16)
| ((prim_field_data[off++] & 0xFF) << 8) | ((prim_field_data[off++] & 0xFF) << 8)
| (prim_field_data[off] & 0xFF); | (prim_field_data[off] & 0xFF);
} }
public long get (String name, long defvalue) public long get (String name, long defvalue)
throws IOException, IllegalArgumentException throws IOException, IllegalArgumentException
{ {
ObjectStreamField field = getField (name, Long.TYPE); ObjectStreamField field = getField (name, Long.TYPE);
if (field == null)
return defvalue;
if (field == null) int off = field.getOffset ();
return defvalue;
int off = field.getOffset (); return (long)(((prim_field_data[off++] & 0xFF) << 56)
| ((prim_field_data[off++] & 0xFF) << 48)
| ((prim_field_data[off++] & 0xFF) << 40)
| ((prim_field_data[off++] & 0xFF) << 32)
| ((prim_field_data[off++] & 0xFF) << 24)
| ((prim_field_data[off++] & 0xFF) << 16)
| ((prim_field_data[off++] & 0xFF) << 8)
| (prim_field_data[off] & 0xFF));
}
public float get (String name, float defvalue)
throws IOException, IllegalArgumentException
{
ObjectStreamField field = getField (name, Float.TYPE);
if (field == null)
return defvalue;
int off = field.getOffset ();
return Float.intBitsToFloat (((prim_field_data[off++] & 0xFF) << 24)
| ((prim_field_data[off++] & 0xFF) << 16)
| ((prim_field_data[off++] & 0xFF) << 8)
| (prim_field_data[off] & 0xFF));
}
public double get (String name, double defvalue)
throws IOException, IllegalArgumentException
{
ObjectStreamField field = getField (name, Double.TYPE);
if (field == null)
return defvalue;
return (long)(((prim_field_data[off++] & 0xFF) << 56) int off = field.getOffset ();
return Double.longBitsToDouble
( (long) (((prim_field_data[off++] & 0xFF) << 56)
| ((prim_field_data[off++] & 0xFF) << 48) | ((prim_field_data[off++] & 0xFF) << 48)
| ((prim_field_data[off++] & 0xFF) << 40) | ((prim_field_data[off++] & 0xFF) << 40)
| ((prim_field_data[off++] & 0xFF) << 32) | ((prim_field_data[off++] & 0xFF) << 32)
| ((prim_field_data[off++] & 0xFF) << 24) | ((prim_field_data[off++] & 0xFF) << 24)
| ((prim_field_data[off++] & 0xFF) << 16) | ((prim_field_data[off++] & 0xFF) << 16)
| ((prim_field_data[off++] & 0xFF) << 8) | ((prim_field_data[off++] & 0xFF) << 8)
| (prim_field_data[off] & 0xFF)); | (prim_field_data[off] & 0xFF)));
} }
public float get (String name, float defvalue)
throws IOException, IllegalArgumentException
{
ObjectStreamField field = getField (name, Float.TYPE);
if (field == null)
return defvalue;
int off = field.getOffset ();
return Float.intBitsToFloat (((prim_field_data[off++] & 0xFF) << 24)
| ((prim_field_data[off++] & 0xFF) << 16)
| ((prim_field_data[off++] & 0xFF) << 8)
| (prim_field_data[off] & 0xFF));
}
public double get (String name, double defvalue)
throws IOException, IllegalArgumentException
{
ObjectStreamField field = getField (name, Double.TYPE);
if (field == null)
return defvalue;
int off = field.getOffset ();
return Double.longBitsToDouble (
(long)(((prim_field_data[off++] & 0xFF) << 56)
| ((prim_field_data[off++] & 0xFF) << 48)
| ((prim_field_data[off++] & 0xFF) << 40)
| ((prim_field_data[off++] & 0xFF) << 32)
| ((prim_field_data[off++] & 0xFF) << 24)
| ((prim_field_data[off++] & 0xFF) << 16)
| ((prim_field_data[off++] & 0xFF) << 8)
| (prim_field_data[off] & 0xFF)));
}
public Object get (String name, Object defvalue) public Object get (String name, Object defvalue)
throws IOException, IllegalArgumentException throws IOException, IllegalArgumentException
{ {
ObjectStreamField field = ObjectStreamField field =
getField (name, defvalue == null ? null : defvalue.getClass ()); getField (name, defvalue == null ? null : defvalue.getClass ());
if (field == null) if (field == null)
return defvalue; return defvalue;
return objs[field.getOffset ()]; return objs[field.getOffset ()];
} }
private ObjectStreamField getField (String name, Class type) private ObjectStreamField getField (String name, Class type)
throws IllegalArgumentException throws IllegalArgumentException
{ {
ObjectStreamField field = clazz.getField (name); ObjectStreamField field = clazz.getField (name);
if (field == null) if (field == null)
return null; return null;
Class field_type = field.getType (); Class field_type = field.getType ();
if (type == field_type || if (type == field_type ||
(type == null && ! field_type.isPrimitive ())) (type == null && ! field_type.isPrimitive ()))
return field; return field;
throw new IllegalArgumentException ("Field requested is of type " throw new IllegalArgumentException ("Field requested is of type "
+ field_type.getName () + field_type.getName ()
+ ", but requested type was " + ", but requested type was "
+ (type == null ? + (type == null ?
"Object" : type.getName ())); "Object" : type.getName ()));
} }
}; };
} }
...@@ -1077,15 +1069,7 @@ public class ObjectInputStream extends InputStream ...@@ -1077,15 +1069,7 @@ public class ObjectInputStream extends InputStream
private int assignNewHandle (Object obj) private int assignNewHandle (Object obj)
{ {
this.objectLookupTable.put (new Integer (this.nextOID), this.objectLookupTable.put (new Integer (this.nextOID),
new ObjectIdentityWrapper (obj)); new ObjectIdentityWrapper (obj));
// try
// {
// DEBUG ("Assigning handle " + this.nextOID);
// DEBUGln (" to " + obj);
// }
// catch (Throwable t) {}
return this.nextOID++; return this.nextOID++;
} }
...@@ -1097,22 +1081,22 @@ public class ObjectInputStream extends InputStream ...@@ -1097,22 +1081,22 @@ public class ObjectInputStream extends InputStream
{ {
Method m = null; Method m = null;
try try
{ {
Class classArgs[] = {}; Class classArgs[] = {};
m = obj.getClass ().getDeclaredMethod ("readResolve", classArgs); m = obj.getClass ().getDeclaredMethod ("readResolve", classArgs);
// m can't be null by definition since an exception would // m can't be null by definition since an exception would
// have been thrown so a check for null is not needed. // have been thrown so a check for null is not needed.
obj = m.invoke (obj, new Object[] {}); obj = m.invoke (obj, new Object[] {});
} }
catch (NoSuchMethodException ignore) catch (NoSuchMethodException ignore)
{ {
} }
catch (IllegalAccessException ignore) catch (IllegalAccessException ignore)
{ {
} }
catch (InvocationTargetException ignore) catch (InvocationTargetException ignore)
{ {
} }
} }
if (this.resolveEnabled) if (this.resolveEnabled)
...@@ -1134,7 +1118,6 @@ public class ObjectInputStream extends InputStream ...@@ -1134,7 +1118,6 @@ public class ObjectInputStream extends InputStream
private void readNextBlock () throws IOException private void readNextBlock () throws IOException
{ {
// DEBUGln ("In readNextBlock ");
readNextBlock (this.realInputStream.readByte ()); readNextBlock (this.realInputStream.readByte ());
} }
...@@ -1142,21 +1125,21 @@ public class ObjectInputStream extends InputStream ...@@ -1142,21 +1125,21 @@ public class ObjectInputStream extends InputStream
private void readNextBlock (byte marker) throws IOException private void readNextBlock (byte marker) throws IOException
{ {
if (marker == TC_BLOCKDATA) if (marker == TC_BLOCKDATA)
{ {
dumpElement ("BLOCK DATA SIZE="); dumpElement ("BLOCK DATA SIZE=");
this.blockDataBytes = this.realInputStream.readUnsignedByte (); this.blockDataBytes = this.realInputStream.readUnsignedByte ();
dumpElementln (Integer.toString(this.blockDataBytes)); dumpElementln (Integer.toString(this.blockDataBytes));
} }
else if (marker == TC_BLOCKDATALONG) else if (marker == TC_BLOCKDATALONG)
{ {
dumpElement ("BLOCK DATA LONG SIZE="); dumpElement ("BLOCK DATA LONG SIZE=");
this.blockDataBytes = this.realInputStream.readInt (); this.blockDataBytes = this.realInputStream.readInt ();
dumpElementln (Integer.toString(this.blockDataBytes)); dumpElementln (Integer.toString(this.blockDataBytes));
} }
else else
{ {
throw new EOFException ("Attempt to read primitive data, but no data block is active."); throw new EOFException ("Attempt to read primitive data, but no data block is active.");
} }
if (this.blockData.length < this.blockDataBytes) if (this.blockData.length < this.blockDataBytes)
this.blockData = new byte[this.blockDataBytes]; this.blockData = new byte[this.blockDataBytes];
...@@ -1170,70 +1153,70 @@ public class ObjectInputStream extends InputStream ...@@ -1170,70 +1153,70 @@ public class ObjectInputStream extends InputStream
throws ClassNotFoundException, IOException throws ClassNotFoundException, IOException
{ {
if (clazz.isPrimitive ()) if (clazz.isPrimitive ())
{
if (clazz == Boolean.TYPE)
{
boolean[] cast_array = (boolean[])array;
for (int i=0; i < cast_array.length; i++)
cast_array[i] = this.realInputStream.readBoolean ();
return;
}
if (clazz == Byte.TYPE)
{ {
byte[] cast_array = (byte[])array; if (clazz == Boolean.TYPE)
for (int i=0; i < cast_array.length; i++) {
cast_array[i] = this.realInputStream.readByte (); boolean[] cast_array = (boolean[])array;
return; for (int i=0; i < cast_array.length; i++)
} cast_array[i] = this.realInputStream.readBoolean ();
if (clazz == Character.TYPE) return;
{ }
char[] cast_array = (char[])array; if (clazz == Byte.TYPE)
for (int i=0; i < cast_array.length; i++) {
cast_array[i] = this.realInputStream.readChar (); byte[] cast_array = (byte[])array;
return; for (int i=0; i < cast_array.length; i++)
} cast_array[i] = this.realInputStream.readByte ();
if (clazz == Double.TYPE) return;
{ }
double[] cast_array = (double[])array; if (clazz == Character.TYPE)
for (int i=0; i < cast_array.length; i++) {
cast_array[i] = this.realInputStream.readDouble (); char[] cast_array = (char[])array;
return; for (int i=0; i < cast_array.length; i++)
} cast_array[i] = this.realInputStream.readChar ();
if (clazz == Float.TYPE) return;
{ }
float[] cast_array = (float[])array; if (clazz == Double.TYPE)
for (int i=0; i < cast_array.length; i++) {
cast_array[i] = this.realInputStream.readFloat (); double[] cast_array = (double[])array;
return; for (int i=0; i < cast_array.length; i++)
} cast_array[i] = this.realInputStream.readDouble ();
if (clazz == Integer.TYPE) return;
{ }
int[] cast_array = (int[])array; if (clazz == Float.TYPE)
for (int i=0; i < cast_array.length; i++) {
cast_array[i] = this.realInputStream.readInt (); float[] cast_array = (float[])array;
return; for (int i=0; i < cast_array.length; i++)
} cast_array[i] = this.realInputStream.readFloat ();
if (clazz == Long.TYPE) return;
{ }
long[] cast_array = (long[])array; if (clazz == Integer.TYPE)
for (int i=0; i < cast_array.length; i++) {
cast_array[i] = this.realInputStream.readLong (); int[] cast_array = (int[])array;
return; for (int i=0; i < cast_array.length; i++)
cast_array[i] = this.realInputStream.readInt ();
return;
}
if (clazz == Long.TYPE)
{
long[] cast_array = (long[])array;
for (int i=0; i < cast_array.length; i++)
cast_array[i] = this.realInputStream.readLong ();
return;
}
if (clazz == Short.TYPE)
{
short[] cast_array = (short[])array;
for (int i=0; i < cast_array.length; i++)
cast_array[i] = this.realInputStream.readShort ();
return;
}
} }
if (clazz == Short.TYPE) else
{ {
short[] cast_array = (short[])array; Object[] cast_array = (Object[])array;
for (int i=0; i < cast_array.length; i++) for (int i=0; i < cast_array.length; i++)
cast_array[i] = this.realInputStream.readShort ();
return;
}
}
else
{
Object[] cast_array = (Object[])array;
for (int i=0; i < cast_array.length; i++)
cast_array[i] = readObject (); cast_array[i] = readObject ();
} }
} }
...@@ -1242,16 +1225,14 @@ public class ObjectInputStream extends InputStream ...@@ -1242,16 +1225,14 @@ public class ObjectInputStream extends InputStream
ObjectStreamClass stream_osc) ObjectStreamClass stream_osc)
throws ClassNotFoundException, IOException throws ClassNotFoundException, IOException
{ {
// DEBUGln ("In readFields");
if (call_read_method) if (call_read_method)
{ {
// DEBUGln (" call_read_method is true"); fieldsAlreadyRead = false;
fieldsAlreadyRead = false; boolean oldmode = setBlockDataMode (true);
boolean oldmode = setBlockDataMode (true); callReadMethod (obj, stream_osc.forClass ());
callReadMethod (obj, stream_osc.forClass ()); setBlockDataMode (oldmode);
setBlockDataMode (oldmode); return;
return; }
}
ObjectStreamField[] real_fields = ObjectStreamField[] real_fields =
ObjectStreamClass.lookup (stream_osc.forClass ()).fields; ObjectStreamClass.lookup (stream_osc.forClass ()).fields;
...@@ -1266,144 +1247,142 @@ public class ObjectInputStream extends InputStream ...@@ -1266,144 +1247,142 @@ public class ObjectInputStream extends InputStream
while (stream_idx < stream_fields.length while (stream_idx < stream_fields.length
&& real_idx < real_fields.length) && real_idx < real_fields.length)
{
default_initialize = false;
set_value = true;
if (stream_idx == stream_fields.length)
default_initialize = true;
else
{
stream_field = stream_fields[stream_idx];
type = stream_field.getType ();
}
if (real_idx == real_fields.length)
set_value = false;
else
{ {
real_field = real_fields[real_idx]; default_initialize = false;
type = real_field.getType (); set_value = true;
field_name = real_field.getName ();
}
if (set_value && !default_initialize) if (stream_idx == stream_fields.length)
{
int comp_val =
real_field.compareTo (stream_field);
if (comp_val < 0)
{
default_initialize = true; default_initialize = true;
real_idx++; else
} {
else if (comp_val > 0) stream_field = stream_fields[stream_idx];
{ type = stream_field.getType ();
}
if (real_idx == real_fields.length)
set_value = false; set_value = false;
stream_idx++;
}
else else
{ {
real_idx++; real_field = real_fields[real_idx];
stream_idx++; type = real_field.getType ();
} field_name = real_field.getName ();
} }
try if (set_value && !default_initialize)
{ {
if (type == Boolean.TYPE) int comp_val =
{ real_field.compareTo (stream_field);
boolean value =
default_initialize ? false : this.realInputStream.readBoolean (); if (comp_val < 0)
if (!default_initialize && set_value) {
dumpElementln (" " + field_name + ": " + value); default_initialize = true;
if (set_value) real_idx++;
setBooleanField (obj, field_name, value); }
} else if (comp_val > 0)
else if (type == Byte.TYPE) {
{ set_value = false;
byte value = stream_idx++;
default_initialize ? 0 : this.realInputStream.readByte (); }
if (!default_initialize && set_value) else
dumpElementln (" " + field_name + ": " + value); {
if (set_value) real_idx++;
setByteField (obj, field_name, value); stream_idx++;
} }
else if (type == Character.TYPE) }
{
char value =
default_initialize ? (char)0 : this.realInputStream.readChar ();
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
setCharField (obj, field_name, value);
}
else if (type == Double.TYPE)
{
double value =
default_initialize ? 0 : this.realInputStream.readDouble ();
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
setDoubleField (obj, field_name, value);
}
else if (type == Float.TYPE)
{
float value =
default_initialize ? 0 : this.realInputStream.readFloat ();
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
setFloatField (obj, field_name, value);
}
else if (type == Integer.TYPE)
{
int value =
default_initialize ? 0 : this.realInputStream.readInt ();
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
setIntField (obj, field_name, value);
}
else if (type == Long.TYPE)
{
long value =
default_initialize ? 0 : this.realInputStream.readLong ();
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
setLongField (obj, field_name, value);
}
else if (type == Short.TYPE)
{
short value =
default_initialize ? (short)0 : this.realInputStream.readShort ();
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
setShortField (obj, field_name, value);
}
else
{
Object value =
default_initialize ? null : readObject ();
if (set_value)
setObjectField (obj, field_name,
real_field.getTypeString (), value);
}
}
catch (NoSuchFieldError e)
{
dumpElementln("XXXX " + field_name + " does not exist.");
}
}
}
try
{
if (type == Boolean.TYPE)
{
boolean value =
default_initialize ? false : this.realInputStream.readBoolean ();
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
setBooleanField (obj, field_name, value);
}
else if (type == Byte.TYPE)
{
byte value =
default_initialize ? 0 : this.realInputStream.readByte ();
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
setByteField (obj, field_name, value);
}
else if (type == Character.TYPE)
{
char value =
default_initialize ? (char)0 : this.realInputStream.readChar ();
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
setCharField (obj, field_name, value);
}
else if (type == Double.TYPE)
{
double value =
default_initialize ? 0 : this.realInputStream.readDouble ();
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
setDoubleField (obj, field_name, value);
}
else if (type == Float.TYPE)
{
float value =
default_initialize ? 0 : this.realInputStream.readFloat ();
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
setFloatField (obj, field_name, value);
}
else if (type == Integer.TYPE)
{
int value =
default_initialize ? 0 : this.realInputStream.readInt ();
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
setIntField (obj, field_name, value);
}
else if (type == Long.TYPE)
{
long value =
default_initialize ? 0 : this.realInputStream.readLong ();
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
setLongField (obj, field_name, value);
}
else if (type == Short.TYPE)
{
short value =
default_initialize ? (short)0 : this.realInputStream.readShort ();
if (!default_initialize && set_value)
dumpElementln (" " + field_name + ": " + value);
if (set_value)
setShortField (obj, field_name, value);
}
else
{
Object value =
default_initialize ? null : readObject ();
if (set_value)
setObjectField (obj, field_name,
real_field.getTypeString (), value);
}
}
catch (NoSuchFieldError e)
{
dumpElementln("XXXX " + field_name + " does not exist.");
}
}
}
// Toggles writing primitive data to block-data buffer. // Toggles writing primitive data to block-data buffer.
private boolean setBlockDataMode (boolean on) private boolean setBlockDataMode (boolean on)
{ {
// DEBUGln ("Setting block data mode to " + on);
boolean oldmode = this.readDataFromBlock; boolean oldmode = this.readDataFromBlock;
this.readDataFromBlock = on; this.readDataFromBlock = on;
...@@ -1420,15 +1399,15 @@ public class ObjectInputStream extends InputStream ...@@ -1420,15 +1399,15 @@ public class ObjectInputStream extends InputStream
private Object newObject (Class real_class, Class constructor_class) private Object newObject (Class real_class, Class constructor_class)
{ {
try try
{ {
Object obj = allocateObject (real_class); Object obj = allocateObject (real_class);
callConstructor (constructor_class, obj); callConstructor (constructor_class, obj);
return obj; return obj;
} }
catch (InstantiationException e) catch (InstantiationException e)
{ {
return null; return null;
} }
} }
...@@ -1441,14 +1420,14 @@ public class ObjectInputStream extends InputStream ...@@ -1441,14 +1420,14 @@ public class ObjectInputStream extends InputStream
Arrays.sort (validators); Arrays.sort (validators);
try try
{ {
for (int i=0; i < validators.length; i++) for (int i=0; i < validators.length; i++)
((ObjectInputValidation)validators[i]).validateObject (); ((ObjectInputValidation)validators[i]).validateObject ();
} }
finally finally
{ {
this.validators.removeAllElements (); this.validators.removeAllElements ();
} }
} }
...@@ -1465,13 +1444,13 @@ public class ObjectInputStream extends InputStream ...@@ -1465,13 +1444,13 @@ public class ObjectInputStream extends InputStream
{ {
return klass.getDeclaredField(name); return klass.getDeclaredField(name);
} }
private static Method getMethod (Class klass, String name, Class args[]) private static Method getMethod (Class klass, String name, Class args[])
throws java.lang.NoSuchMethodException throws java.lang.NoSuchMethodException
{ {
return klass.getDeclaredMethod(name, args); return klass.getDeclaredMethod(name, args);
} }
private void callReadMethod (Object obj, Class klass) throws IOException private void callReadMethod (Object obj, Class klass) throws IOException
{ {
try try
...@@ -1523,7 +1502,7 @@ public class ObjectInputStream extends InputStream ...@@ -1523,7 +1502,7 @@ public class ObjectInputStream extends InputStream
} }
private void setByteField (Object obj, String field_name, private void setByteField (Object obj, String field_name,
byte val) byte val)
{ {
try try
{ {
...@@ -1583,7 +1562,7 @@ public class ObjectInputStream extends InputStream ...@@ -1583,7 +1562,7 @@ public class ObjectInputStream extends InputStream
} }
private void setIntField (Object obj, String field_name, private void setIntField (Object obj, String field_name,
int val) int val)
{ {
try try
{ {
...@@ -1599,7 +1578,7 @@ public class ObjectInputStream extends InputStream ...@@ -1599,7 +1578,7 @@ public class ObjectInputStream extends InputStream
private void setLongField (Object obj, String field_name, private void setLongField (Object obj, String field_name,
long val) long val)
{ {
try try
{ {
...@@ -1666,7 +1645,7 @@ public class ObjectInputStream extends InputStream ...@@ -1666,7 +1645,7 @@ public class ObjectInputStream extends InputStream
private boolean fieldsAlreadyRead; private boolean fieldsAlreadyRead;
private Vector validators; private Vector validators;
private static boolean dump; private static boolean dump;
private void dumpElement (String msg) private void dumpElement (String msg)
{ {
...@@ -1681,12 +1660,12 @@ public class ObjectInputStream extends InputStream ...@@ -1681,12 +1660,12 @@ public class ObjectInputStream extends InputStream
} }
static static
{ {
if (Configuration.INIT_LOAD_LIBRARY) if (Configuration.INIT_LOAD_LIBRARY)
{ {
System.loadLibrary ("javaio"); System.loadLibrary ("javaio");
} }
} }
} }
......
...@@ -7,7 +7,7 @@ GNU Classpath is free software; you can redistribute it and/or modify ...@@ -7,7 +7,7 @@ GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option) the Free Software Foundation; either version 2, or (at your option)
any later version. any later version.
GNU Classpath is distributed in the hope that it will be useful, but GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
...@@ -77,22 +77,22 @@ import gnu.classpath.Configuration; ...@@ -77,22 +77,22 @@ import gnu.classpath.Configuration;
in a graph lost. in a graph lost.
Example usage: Example usage:
<pre> <pre>
Hashtable map = new Hashtable (); Hashtable map = new Hashtable ();
map.put ("one", new Integer (1)); map.put ("one", new Integer (1));
map.put ("two", new Integer (2)); map.put ("two", new Integer (2));
ObjectOutputStream oos = ObjectOutputStream oos =
new ObjectOutputStream (new FileOutputStream ("numbers")); new ObjectOutputStream (new FileOutputStream ("numbers"));
oos.writeObject (map); oos.writeObject (map);
oos.close (); oos.close ();
ObjectInputStream ois = ObjectInputStream ois =
new ObjectInputStream (new FileInputStream ("numbers")); new ObjectInputStream (new FileInputStream ("numbers"));
Hashtable newmap = (Hashtable)ois.readObject (); Hashtable newmap = (Hashtable)ois.readObject ();
System.out.println (newmap); System.out.println (newmap);
</pre> </pre>
The default serialization can be overriden in two ways. The default serialization can be overriden in two ways.
...@@ -188,7 +188,7 @@ public class ObjectOutputStream extends OutputStream ...@@ -188,7 +188,7 @@ public class ObjectOutputStream extends OutputStream
realOutput.writeByte (TC_NULL); realOutput.writeByte (TC_NULL);
break; break;
} }
Integer handle = findHandle (obj); Integer handle = findHandle (obj);
if (handle != null) if (handle != null)
{ {
...@@ -196,16 +196,16 @@ public class ObjectOutputStream extends OutputStream ...@@ -196,16 +196,16 @@ public class ObjectOutputStream extends OutputStream
realOutput.writeInt (handle.intValue ()); realOutput.writeInt (handle.intValue ());
break; break;
} }
if (obj instanceof Class) if (obj instanceof Class)
{ {
Class cl = (Class)obj; Class cl = (Class)obj;
ObjectStreamClass osc = ObjectStreamClass.lookupForClassObject(cl); ObjectStreamClass osc = ObjectStreamClass.lookupForClassObject (cl);
assignNewHandle (obj); assignNewHandle (obj);
realOutput.writeByte (TC_CLASS); realOutput.writeByte (TC_CLASS);
if (!osc.isProxyClass) if (!osc.isProxyClass)
{ {
writeObject(osc); writeObject (osc);
} }
else else
{ {
...@@ -224,7 +224,7 @@ public class ObjectOutputStream extends OutputStream ...@@ -224,7 +224,7 @@ public class ObjectOutputStream extends OutputStream
} }
break; break;
} }
if (obj instanceof ObjectStreamClass) if (obj instanceof ObjectStreamClass)
{ {
ObjectStreamClass osc = (ObjectStreamClass)obj; ObjectStreamClass osc = (ObjectStreamClass)obj;
...@@ -232,46 +232,46 @@ public class ObjectOutputStream extends OutputStream ...@@ -232,46 +232,46 @@ public class ObjectOutputStream extends OutputStream
realOutput.writeUTF (osc.getName ()); realOutput.writeUTF (osc.getName ());
realOutput.writeLong (osc.getSerialVersionUID ()); realOutput.writeLong (osc.getSerialVersionUID ());
assignNewHandle (obj); assignNewHandle (obj);
int flags = osc.getFlags (); int flags = osc.getFlags ();
if (protocolVersion == PROTOCOL_VERSION_2 if (protocolVersion == PROTOCOL_VERSION_2
&& osc.isExternalizable ()) && osc.isExternalizable ())
flags |= SC_BLOCK_DATA; flags |= SC_BLOCK_DATA;
realOutput.writeByte (flags); realOutput.writeByte (flags);
ObjectStreamField[] fields = osc.fields; ObjectStreamField[] fields = osc.fields;
realOutput.writeShort (fields.length); realOutput.writeShort (fields.length);
ObjectStreamField field; ObjectStreamField field;
for (int i=0; i < fields.length; i++) for (int i=0; i < fields.length; i++)
{ {
field = fields[i]; field = fields[i];
realOutput.writeByte (field.getTypeCode ()); realOutput.writeByte (field.getTypeCode ());
realOutput.writeUTF (field.getName ()); realOutput.writeUTF (field.getName ());
if (! field.isPrimitive ()) if (! field.isPrimitive ())
writeObject (field.getTypeString ()); writeObject (field.getTypeString ());
} }
boolean oldmode = setBlockDataMode (true); boolean oldmode = setBlockDataMode (true);
annotateClass (osc.forClass ()); annotateClass (osc.forClass ());
setBlockDataMode (oldmode); setBlockDataMode (oldmode);
realOutput.writeByte (TC_ENDBLOCKDATA); realOutput.writeByte (TC_ENDBLOCKDATA);
if (osc.isSerializable ()) if (osc.isSerializable ())
writeObject (osc.getSuper ()); writeObject (osc.getSuper ());
else else
writeObject (null); writeObject (null);
break; break;
} }
if ((replacementEnabled || obj instanceof Serializable) if ((replacementEnabled || obj instanceof Serializable)
&& ! replaceDone) && ! replaceDone)
{ {
replacedObject = obj; replacedObject = obj;
if (obj instanceof Serializable) if (obj instanceof Serializable)
{ {
Method m = null; Method m = null;
...@@ -294,14 +294,14 @@ public class ObjectOutputStream extends OutputStream ...@@ -294,14 +294,14 @@ public class ObjectOutputStream extends OutputStream
{ {
} }
} }
if (replacementEnabled) if (replacementEnabled)
obj = replaceObject (obj); obj = replaceObject (obj);
replaceDone = true; replaceDone = true;
continue; continue;
} }
if (obj instanceof String) if (obj instanceof String)
{ {
realOutput.writeByte (TC_STRING); realOutput.writeByte (TC_STRING);
...@@ -309,12 +309,12 @@ public class ObjectOutputStream extends OutputStream ...@@ -309,12 +309,12 @@ public class ObjectOutputStream extends OutputStream
realOutput.writeUTF ((String)obj); realOutput.writeUTF ((String)obj);
break; break;
} }
Class clazz = obj.getClass (); Class clazz = obj.getClass ();
ObjectStreamClass osc = ObjectStreamClass.lookupForClassObject (clazz); ObjectStreamClass osc = ObjectStreamClass.lookupForClassObject (clazz);
if (osc == null) if (osc == null)
throw new NotSerializableException (clazz.getName ()); throw new NotSerializableException (clazz.getName ());
if (clazz.isArray ()) if (clazz.isArray ())
{ {
realOutput.writeByte (TC_ARRAY); realOutput.writeByte (TC_ARRAY);
...@@ -323,56 +323,55 @@ public class ObjectOutputStream extends OutputStream ...@@ -323,56 +323,55 @@ public class ObjectOutputStream extends OutputStream
writeArraySizeAndElements (obj, clazz.getComponentType ()); writeArraySizeAndElements (obj, clazz.getComponentType ());
break; break;
} }
realOutput.writeByte (TC_OBJECT); realOutput.writeByte (TC_OBJECT);
writeObject (osc); writeObject (osc);
if (replaceDone) if (replaceDone)
assignNewHandle (replacedObject); assignNewHandle (replacedObject);
else else
assignNewHandle (obj); assignNewHandle (obj);
if (obj instanceof Externalizable) if (obj instanceof Externalizable)
{ {
if (protocolVersion == PROTOCOL_VERSION_2) if (protocolVersion == PROTOCOL_VERSION_2)
setBlockDataMode (true); setBlockDataMode (true);
((Externalizable)obj).writeExternal (this); ((Externalizable)obj).writeExternal (this);
if (protocolVersion == PROTOCOL_VERSION_2) if (protocolVersion == PROTOCOL_VERSION_2)
{ {
setBlockDataMode (false); setBlockDataMode (false);
realOutput.writeByte (TC_ENDBLOCKDATA); realOutput.writeByte (TC_ENDBLOCKDATA);
} }
break; break;
} }
if (obj instanceof Serializable) if (obj instanceof Serializable)
{ {
currentObject = obj; currentObject = obj;
ObjectStreamClass[] hierarchy = ObjectStreamClass[] hierarchy =
ObjectStreamClass.getObjectStreamClasses (clazz); ObjectStreamClass.getObjectStreamClasses (clazz);
boolean has_write; boolean has_write;
for (int i=0; i < hierarchy.length; i++) for (int i=0; i < hierarchy.length; i++)
{ {
currentObjectStreamClass = hierarchy[i]; currentObjectStreamClass = hierarchy[i];
fieldsAlreadyWritten = false; fieldsAlreadyWritten = false;
has_write = currentObjectStreamClass.hasWriteMethod (); has_write = currentObjectStreamClass.hasWriteMethod ();
writeFields (obj, currentObjectStreamClass.fields, writeFields (obj, currentObjectStreamClass.fields,
has_write); has_write);
} }
currentObject = null; currentObject = null;
currentObjectStreamClass = null; currentObjectStreamClass = null;
currentPutField = null; currentPutField = null;
break; break;
} }
throw new NotSerializableException (clazz.getName ()); throw new NotSerializableException (clazz.getName ());
} // end pseudo-loop } // end pseudo-loop
} }
...@@ -395,18 +394,16 @@ public class ObjectOutputStream extends OutputStream ...@@ -395,18 +394,16 @@ public class ObjectOutputStream extends OutputStream
{ {
throw new StreamCorruptedException ("Exception " + ioe + " thrown while exception was being written to stream."); throw new StreamCorruptedException ("Exception " + ioe + " thrown while exception was being written to stream.");
} }
reset (true); reset (true);
} }
finally finally
{ {
isSerializing = was_serializing; isSerializing = was_serializing;
setBlockDataMode (old_mode); setBlockDataMode (old_mode);
} }
} }
/** /**
Writes the current objects non-transient, non-static fields from Writes the current objects non-transient, non-static fields from
the current class to the underlying output stream. the current class to the underlying output stream.
...@@ -464,12 +461,12 @@ public class ObjectOutputStream extends OutputStream ...@@ -464,12 +461,12 @@ public class ObjectOutputStream extends OutputStream
private void reset (boolean internal) throws IOException private void reset (boolean internal) throws IOException
{ {
if (!internal) if (!internal)
{ {
if (isSerializing) if (isSerializing)
throw new IOException ("Reset called while serialization in progress"); throw new IOException ("Reset called while serialization in progress");
realOutput.writeByte (TC_RESET); realOutput.writeByte (TC_RESET);
} }
clearHandles (); clearHandles ();
} }
...@@ -649,12 +646,12 @@ public class ObjectOutputStream extends OutputStream ...@@ -649,12 +646,12 @@ public class ObjectOutputStream extends OutputStream
public void write (int data) throws IOException public void write (int data) throws IOException
{ {
if (writeDataAsBlocks) if (writeDataAsBlocks)
{ {
if (blockDataCount == BUFFER_SIZE) if (blockDataCount == BUFFER_SIZE)
drain (); drain ();
blockData[ blockDataCount++ ] = (byte)data; blockData[ blockDataCount++ ] = (byte)data;
} }
else else
realOutput.write (data); realOutput.write (data);
} }
...@@ -675,22 +672,22 @@ public class ObjectOutputStream extends OutputStream ...@@ -675,22 +672,22 @@ public class ObjectOutputStream extends OutputStream
public void write (byte[] b, int off, int len) throws IOException public void write (byte[] b, int off, int len) throws IOException
{ {
if (writeDataAsBlocks) if (writeDataAsBlocks)
{
if (len < 0)
throw new IndexOutOfBoundsException ();
if (blockDataCount + len < BUFFER_SIZE)
{
System.arraycopy (b, off, blockData, blockDataCount, len);
blockDataCount += len;
}
else
{ {
drain (); if (len < 0)
writeBlockDataHeader (len); throw new IndexOutOfBoundsException ();
realOutput.write (b, off, len);
if (blockDataCount + len < BUFFER_SIZE)
{
System.arraycopy (b, off, blockData, blockDataCount, len);
blockDataCount += len;
}
else
{
drain ();
writeBlockDataHeader (len);
realOutput.write (b, off, len);
}
} }
}
else else
realOutput.write (b, off, len); realOutput.write (b, off, len);
} }
...@@ -871,143 +868,143 @@ public class ObjectOutputStream extends OutputStream ...@@ -871,143 +868,143 @@ public class ObjectOutputStream extends OutputStream
currentPutField = new PutField () currentPutField = new PutField ()
{ {
private byte[] prim_field_data private byte[] prim_field_data
= new byte[currentObjectStreamClass.primFieldSize]; = new byte[currentObjectStreamClass.primFieldSize];
private Object[] objs private Object[] objs
= new Object[currentObjectStreamClass.objectFieldCount]; = new Object[currentObjectStreamClass.objectFieldCount];
public void put (String name, boolean value) public void put (String name, boolean value)
throws IOException, IllegalArgumentException throws IOException, IllegalArgumentException
{ {
ObjectStreamField field ObjectStreamField field
= currentObjectStreamClass.getField (name); = currentObjectStreamClass.getField (name);
checkType (field, 'Z'); checkType (field, 'Z');
prim_field_data[field.getOffset ()] = (byte)(value ? 1 : 0); prim_field_data[field.getOffset ()] = (byte)(value ? 1 : 0);
} }
public void put (String name, byte value) public void put (String name, byte value)
throws IOException, IllegalArgumentException throws IOException, IllegalArgumentException
{ {
ObjectStreamField field ObjectStreamField field
= currentObjectStreamClass.getField (name); = currentObjectStreamClass.getField (name);
checkType (field, 'B'); checkType (field, 'B');
prim_field_data[field.getOffset ()] = value; prim_field_data[field.getOffset ()] = value;
} }
public void put (String name, char value) public void put (String name, char value)
throws IOException, IllegalArgumentException throws IOException, IllegalArgumentException
{ {
ObjectStreamField field ObjectStreamField field
= currentObjectStreamClass.getField (name); = currentObjectStreamClass.getField (name);
checkType (field, 'C'); checkType (field, 'C');
int off = field.getOffset (); int off = field.getOffset ();
prim_field_data[off++] = (byte)(value >>> 8); prim_field_data[off++] = (byte)(value >>> 8);
prim_field_data[off] = (byte)value; prim_field_data[off] = (byte)value;
} }
public void put (String name, double value) public void put (String name, double value)
throws IOException, IllegalArgumentException throws IOException, IllegalArgumentException
{ {
ObjectStreamField field ObjectStreamField field
= currentObjectStreamClass.getField (name); = currentObjectStreamClass.getField (name);
checkType (field, 'D'); checkType (field, 'D');
int off = field.getOffset (); int off = field.getOffset ();
long l_value = Double.doubleToLongBits (value); long l_value = Double.doubleToLongBits (value);
prim_field_data[off++] = (byte)(l_value >>> 52); prim_field_data[off++] = (byte)(l_value >>> 52);
prim_field_data[off++] = (byte)(l_value >>> 48); prim_field_data[off++] = (byte)(l_value >>> 48);
prim_field_data[off++] = (byte)(l_value >>> 40); prim_field_data[off++] = (byte)(l_value >>> 40);
prim_field_data[off++] = (byte)(l_value >>> 32); prim_field_data[off++] = (byte)(l_value >>> 32);
prim_field_data[off++] = (byte)(l_value >>> 24); prim_field_data[off++] = (byte)(l_value >>> 24);
prim_field_data[off++] = (byte)(l_value >>> 16); prim_field_data[off++] = (byte)(l_value >>> 16);
prim_field_data[off++] = (byte)(l_value >>> 8); prim_field_data[off++] = (byte)(l_value >>> 8);
prim_field_data[off] = (byte)l_value; prim_field_data[off] = (byte)l_value;
} }
public void put (String name, float value) public void put (String name, float value)
throws IOException, IllegalArgumentException throws IOException, IllegalArgumentException
{ {
ObjectStreamField field ObjectStreamField field
= currentObjectStreamClass.getField (name); = currentObjectStreamClass.getField (name);
checkType (field, 'F'); checkType (field, 'F');
int off = field.getOffset (); int off = field.getOffset ();
int i_value = Float.floatToIntBits (value); int i_value = Float.floatToIntBits (value);
prim_field_data[off++] = (byte)(i_value >>> 24); prim_field_data[off++] = (byte)(i_value >>> 24);
prim_field_data[off++] = (byte)(i_value >>> 16); prim_field_data[off++] = (byte)(i_value >>> 16);
prim_field_data[off++] = (byte)(i_value >>> 8); prim_field_data[off++] = (byte)(i_value >>> 8);
prim_field_data[off] = (byte)i_value; prim_field_data[off] = (byte)i_value;
} }
public void put (String name, int value) public void put (String name, int value)
throws IOException, IllegalArgumentException throws IOException, IllegalArgumentException
{ {
ObjectStreamField field ObjectStreamField field
= currentObjectStreamClass.getField (name); = currentObjectStreamClass.getField (name);
checkType (field, 'I'); checkType (field, 'I');
int off = field.getOffset (); int off = field.getOffset ();
prim_field_data[off++] = (byte)(value >>> 24); prim_field_data[off++] = (byte)(value >>> 24);
prim_field_data[off++] = (byte)(value >>> 16); prim_field_data[off++] = (byte)(value >>> 16);
prim_field_data[off++] = (byte)(value >>> 8); prim_field_data[off++] = (byte)(value >>> 8);
prim_field_data[off] = (byte)value; prim_field_data[off] = (byte)value;
} }
public void put (String name, long value) public void put (String name, long value)
throws IOException, IllegalArgumentException throws IOException, IllegalArgumentException
{ {
ObjectStreamField field ObjectStreamField field
= currentObjectStreamClass.getField (name); = currentObjectStreamClass.getField (name);
checkType (field, 'J'); checkType (field, 'J');
int off = field.getOffset (); int off = field.getOffset ();
prim_field_data[off++] = (byte)(value >>> 52); prim_field_data[off++] = (byte)(value >>> 52);
prim_field_data[off++] = (byte)(value >>> 48); prim_field_data[off++] = (byte)(value >>> 48);
prim_field_data[off++] = (byte)(value >>> 40); prim_field_data[off++] = (byte)(value >>> 40);
prim_field_data[off++] = (byte)(value >>> 32); prim_field_data[off++] = (byte)(value >>> 32);
prim_field_data[off++] = (byte)(value >>> 24); prim_field_data[off++] = (byte)(value >>> 24);
prim_field_data[off++] = (byte)(value >>> 16); prim_field_data[off++] = (byte)(value >>> 16);
prim_field_data[off++] = (byte)(value >>> 8); prim_field_data[off++] = (byte)(value >>> 8);
prim_field_data[off] = (byte)value; prim_field_data[off] = (byte)value;
} }
public void put (String name, short value) public void put (String name, short value)
throws IOException, IllegalArgumentException throws IOException, IllegalArgumentException
{ {
ObjectStreamField field ObjectStreamField field
= currentObjectStreamClass.getField (name); = currentObjectStreamClass.getField (name);
checkType (field, 'S'); checkType (field, 'S');
int off = field.getOffset (); int off = field.getOffset ();
prim_field_data[off++] = (byte)(value >>> 8); prim_field_data[off++] = (byte)(value >>> 8);
prim_field_data[off] = (byte)value; prim_field_data[off] = (byte)value;
} }
public void put (String name, Object value) public void put (String name, Object value)
throws IOException, IllegalArgumentException throws IOException, IllegalArgumentException
{ {
ObjectStreamField field ObjectStreamField field
= currentObjectStreamClass.getField (name); = currentObjectStreamClass.getField (name);
if (field == null) if (field == null)
throw new IllegalArgumentException (); throw new IllegalArgumentException ();
if (value != null && if (value != null &&
! field.getType ().isAssignableFrom (value.getClass ())) ! field.getType ().isAssignableFrom (value.getClass ()))
throw new IllegalArgumentException (); throw new IllegalArgumentException ();
objs[field.getOffset ()] = value; objs[field.getOffset ()] = value;
} }
public void write (ObjectOutput out) throws IOException public void write (ObjectOutput out) throws IOException
{ {
// Apparently Block data is not used with PutField as per // Apparently Block data is not used with PutField as per
// empirical evidence against JDK 1.2. Also see Mauve test // empirical evidence against JDK 1.2. Also see Mauve test
// java.io.ObjectInputOutput.Test.GetPutField. // java.io.ObjectInputOutput.Test.GetPutField.
boolean oldmode = setBlockDataMode (false); boolean oldmode = setBlockDataMode (false);
out.write (prim_field_data); out.write (prim_field_data);
for (int i = 0; i < objs.length; ++ i) for (int i = 0; i < objs.length; ++ i)
out.writeObject (objs[i]); out.writeObject (objs[i]);
setBlockDataMode (oldmode); setBlockDataMode (oldmode);
} }
private void checkType (ObjectStreamField field, char type) private void checkType (ObjectStreamField field, char type)
throws IllegalArgumentException throws IllegalArgumentException
{ {
if (TypeSignature.getEncodingOfClass (field.getType ()).charAt (0) != type) if (TypeSignature.getEncodingOfClass (field.getType ()).charAt (0) != type)
throw new IllegalArgumentException (); throw new IllegalArgumentException ();
} }
}; };
// end PutFieldImpl // end PutFieldImpl
...@@ -1029,15 +1026,15 @@ public class ObjectOutputStream extends OutputStream ...@@ -1029,15 +1026,15 @@ public class ObjectOutputStream extends OutputStream
private void writeBlockDataHeader (int size) throws IOException private void writeBlockDataHeader (int size) throws IOException
{ {
if (size < 256) if (size < 256)
{ {
realOutput.writeByte (TC_BLOCKDATA); realOutput.writeByte (TC_BLOCKDATA);
realOutput.write (size); realOutput.write (size);
} }
else else
{ {
realOutput.writeByte (TC_BLOCKDATALONG); realOutput.writeByte (TC_BLOCKDATALONG);
realOutput.writeInt (size); realOutput.writeInt (size);
} }
} }
...@@ -1073,78 +1070,78 @@ public class ObjectOutputStream extends OutputStream ...@@ -1073,78 +1070,78 @@ public class ObjectOutputStream extends OutputStream
int length = Array.getLength (array); int length = Array.getLength (array);
if (clazz.isPrimitive ()) if (clazz.isPrimitive ())
{
if (clazz == Boolean.TYPE)
{
boolean[] cast_array = (boolean[])array;
realOutput.writeInt (length);
for (int i=0; i < length; i++)
realOutput.writeBoolean (cast_array[i]);
return;
}
if (clazz == Byte.TYPE)
{
byte[] cast_array = (byte[])array;
realOutput.writeInt (length);
realOutput.write(cast_array, 0, length);
return;
}
if (clazz == Character.TYPE)
{
char[] cast_array = (char[])array;
realOutput.writeInt (length);
for (int i=0; i < length; i++)
realOutput.writeChar (cast_array[i]);
return;
}
if (clazz == Double.TYPE)
{
double[] cast_array = (double[])array;
realOutput.writeInt (length);
for (int i=0; i < length; i++)
realOutput.writeDouble (cast_array[i]);
return;
}
if (clazz == Float.TYPE)
{
float[] cast_array = (float[])array;
realOutput.writeInt (length);
for (int i=0; i < length; i++)
realOutput.writeFloat (cast_array[i]);
return;
}
if (clazz == Integer.TYPE)
{
int[] cast_array = (int[])array;
realOutput.writeInt (length);
for (int i=0; i < length; i++)
realOutput.writeInt (cast_array[i]);
return;
}
if (clazz == Long.TYPE)
{ {
long[] cast_array = (long[])array; if (clazz == Boolean.TYPE)
realOutput.writeInt (length); {
for (int i=0; i < length; i++) boolean[] cast_array = (boolean[])array;
realOutput.writeLong (cast_array[i]); realOutput.writeInt (length);
return; for (int i=0; i < length; i++)
realOutput.writeBoolean (cast_array[i]);
return;
}
if (clazz == Byte.TYPE)
{
byte[] cast_array = (byte[])array;
realOutput.writeInt (length);
realOutput.write(cast_array, 0, length);
return;
}
if (clazz == Character.TYPE)
{
char[] cast_array = (char[])array;
realOutput.writeInt (length);
for (int i=0; i < length; i++)
realOutput.writeChar (cast_array[i]);
return;
}
if (clazz == Double.TYPE)
{
double[] cast_array = (double[])array;
realOutput.writeInt (length);
for (int i=0; i < length; i++)
realOutput.writeDouble (cast_array[i]);
return;
}
if (clazz == Float.TYPE)
{
float[] cast_array = (float[])array;
realOutput.writeInt (length);
for (int i=0; i < length; i++)
realOutput.writeFloat (cast_array[i]);
return;
}
if (clazz == Integer.TYPE)
{
int[] cast_array = (int[])array;
realOutput.writeInt (length);
for (int i=0; i < length; i++)
realOutput.writeInt (cast_array[i]);
return;
}
if (clazz == Long.TYPE)
{
long[] cast_array = (long[])array;
realOutput.writeInt (length);
for (int i=0; i < length; i++)
realOutput.writeLong (cast_array[i]);
return;
}
if (clazz == Short.TYPE)
{
short[] cast_array = (short[])array;
realOutput.writeInt (length);
for (int i=0; i < length; i++)
realOutput.writeShort (cast_array[i]);
return;
}
} }
if (clazz == Short.TYPE) else
{ {
short[] cast_array = (short[])array; Object[] cast_array = (Object[])array;
realOutput.writeInt (length); realOutput.writeInt (length);
for (int i=0; i < length; i++) for (int i=0; i < length; i++)
realOutput.writeShort (cast_array[i]); writeObject (cast_array[i]);
return;
} }
}
else
{
Object[] cast_array = (Object[])array;
realOutput.writeInt (length);
for (int i=0; i < length; i++)
writeObject (cast_array[i]);
}
} }
...@@ -1156,43 +1153,43 @@ public class ObjectOutputStream extends OutputStream ...@@ -1156,43 +1153,43 @@ public class ObjectOutputStream extends OutputStream
boolean call_write_method) throws IOException boolean call_write_method) throws IOException
{ {
if (call_write_method) if (call_write_method)
{ {
setBlockDataMode (true); setBlockDataMode (true);
callWriteMethod (obj); callWriteMethod (obj);
setBlockDataMode (false); setBlockDataMode (false);
realOutput.writeByte (TC_ENDBLOCKDATA); realOutput.writeByte (TC_ENDBLOCKDATA);
return; return;
} }
boolean oldmode = setBlockDataMode (false); boolean oldmode = setBlockDataMode (false);
String field_name; String field_name;
Class type; Class type;
for (int i=0; i < fields.length; i++) for (int i=0; i < fields.length; i++)
{ {
field_name = fields[i].getName (); field_name = fields[i].getName ();
type = fields[i].getType (); type = fields[i].getType ();
if (type == Boolean.TYPE) if (type == Boolean.TYPE)
realOutput.writeBoolean (getBooleanField (obj, field_name)); realOutput.writeBoolean (getBooleanField (obj, field_name));
else if (type == Byte.TYPE) else if (type == Byte.TYPE)
realOutput.writeByte (getByteField (obj, field_name)); realOutput.writeByte (getByteField (obj, field_name));
else if (type == Character.TYPE) else if (type == Character.TYPE)
realOutput.writeChar (getCharField (obj, field_name)); realOutput.writeChar (getCharField (obj, field_name));
else if (type == Double.TYPE) else if (type == Double.TYPE)
realOutput.writeDouble (getDoubleField (obj, field_name)); realOutput.writeDouble (getDoubleField (obj, field_name));
else if (type == Float.TYPE) else if (type == Float.TYPE)
realOutput.writeFloat (getFloatField (obj, field_name)); realOutput.writeFloat (getFloatField (obj, field_name));
else if (type == Integer.TYPE) else if (type == Integer.TYPE)
realOutput.writeInt (getIntField (obj, field_name)); realOutput.writeInt (getIntField (obj, field_name));
else if (type == Long.TYPE) else if (type == Long.TYPE)
realOutput.writeLong (getLongField (obj, field_name)); realOutput.writeLong (getLongField (obj, field_name));
else if (type == Short.TYPE) else if (type == Short.TYPE)
realOutput.writeShort (getShortField (obj, field_name)); realOutput.writeShort (getShortField (obj, field_name));
else else
writeObject (getObjectField (obj, field_name, writeObject (getObjectField (obj, field_name,
fields[i].getTypeString ())); fields[i].getTypeString ()));
} }
setBlockDataMode(oldmode); setBlockDataMode (oldmode);
} }
...@@ -1246,7 +1243,8 @@ public class ObjectOutputStream extends OutputStream ...@@ -1246,7 +1243,8 @@ public class ObjectOutputStream extends OutputStream
} }
} }
private boolean getBooleanField (Object obj, String field_name) throws IOException private boolean getBooleanField (Object obj, String field_name)
throws IOException
{ {
try try
{ {
...@@ -1291,7 +1289,8 @@ public class ObjectOutputStream extends OutputStream ...@@ -1291,7 +1289,8 @@ public class ObjectOutputStream extends OutputStream
} }
} }
private double getDoubleField (Object obj, String field_name) throws IOException private double getDoubleField (Object obj, String field_name)
throws IOException
{ {
try try
{ {
...@@ -1306,7 +1305,8 @@ public class ObjectOutputStream extends OutputStream ...@@ -1306,7 +1305,8 @@ public class ObjectOutputStream extends OutputStream
} }
} }
private float getFloatField (Object obj, String field_name) throws IOException private float getFloatField (Object obj, String field_name)
throws IOException
{ {
try try
{ {
...@@ -1351,7 +1351,8 @@ public class ObjectOutputStream extends OutputStream ...@@ -1351,7 +1351,8 @@ public class ObjectOutputStream extends OutputStream
} }
} }
private short getShortField (Object obj, String field_name) throws IOException private short getShortField (Object obj, String field_name)
throws IOException
{ {
try try
{ {
...@@ -1388,13 +1389,13 @@ public class ObjectOutputStream extends OutputStream ...@@ -1388,13 +1389,13 @@ public class ObjectOutputStream extends OutputStream
{ {
return klass.getDeclaredField(name); return klass.getDeclaredField(name);
} }
private static Method getMethod (Class klass, String name, Class[] args) private static Method getMethod (Class klass, String name, Class[] args)
throws java.lang.NoSuchMethodException throws java.lang.NoSuchMethodException
{ {
return klass.getDeclaredMethod(name, args); return klass.getDeclaredMethod(name, args);
} }
// this value comes from 1.2 spec, but is used in 1.1 as well // this value comes from 1.2 spec, but is used in 1.1 as well
private final static int BUFFER_SIZE = 1024; private final static int BUFFER_SIZE = 1024;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment