ObjectInputStream.java (read): AND byte with 0xff to make result unsigned.

* java/io/ObjectInputStream.java (read): AND byte with 0xff to make
	result unsigned.
	(read (byte[], int, int)): Only call readNextBlock() if the block
	buffer would actually be overrun. Increment blockDataPosition.
	(callReadMethod): Propagate exceptions from invocation target.
	* java/io/ObjectOutputStream.java (callWriteMethod): Propagate
	exceptions from invocation target.

From-SVN: r39293
This commit is contained in:
Bryce McKinlay 2001-01-27 06:04:29 +00:00 committed by Bryce McKinlay
parent 31e1e0a652
commit 60b7365f52
3 changed files with 53 additions and 15 deletions

View File

@ -1,3 +1,13 @@
2001-01-27 Bryce McKinlay <bryce@albatross.co.nz>
* java/io/ObjectInputStream.java (read): AND byte with 0xff to make
result unsigned.
(read (byte[], int, int)): Only call readNextBlock() if the block
buffer would actually be overrun. Increment blockDataPosition.
(callReadMethod): Propagate exceptions from invocation target.
* java/io/ObjectOutputStream.java (callWriteMethod): Propagate
exceptions from invocation target.
2001-01-26 Tom Tromey <tromey@redhat.com> 2001-01-26 Tom Tromey <tromey@redhat.com>
* jni.cc (_Jv_JNI_GetAnyMethodID): Rewrite signature from external * jni.cc (_Jv_JNI_GetAnyMethodID): Rewrite signature from external

View File

@ -577,21 +577,23 @@ public class ObjectInputStream extends InputStream
{ {
if (this.blockDataPosition >= this.blockDataBytes) if (this.blockDataPosition >= this.blockDataBytes)
readNextBlock (); readNextBlock ();
return this.blockData[this.blockDataPosition++]; return (this.blockData[this.blockDataPosition++] & 0xff);
} }
else else
return this.realInputStream.read (); return this.realInputStream.read ();
} }
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)
readNextBlock (); readNextBlock ();
System.arraycopy (this.blockData, this.blockDataPosition, System.arraycopy (this.blockData, this.blockDataPosition,
data, offset, length); data, offset, length);
blockDataPosition += length;
return length; return length;
} }
else else
@ -1359,16 +1361,29 @@ public class ObjectInputStream extends InputStream
{ {
try try
{ {
Class classArgs[] = {Class.forName ("java.io.ObjectInputStream")}; Class classArgs[] = {ObjectInputStream.class};
Method m = getMethod (klass, "readObject", classArgs); Method m = getMethod (klass, "readObject", classArgs);
if (m == null) if (m == null)
return; return;
Object args[] = {this}; Object args[] = {this};
m.invoke (obj, args); m.invoke (obj, args);
} }
catch (Exception _) catch (InvocationTargetException x)
{ {
throw new IOException (); /* Rethrow if possible. */
Throwable exception = x.getTargetException();
if (exception instanceof RuntimeException)
throw (RuntimeException) exception;
if (exception instanceof IOException)
throw (IOException) exception;
throw new IOException ("Exception thrown from readObject() on " +
klass + ": " + exception.getClass().getName());
}
catch (Exception x)
{
throw new IOException ("Failure invoking readObject() on " +
klass + ": " + x.getClass().getName());
} }
} }

View File

@ -633,7 +633,7 @@ public class ObjectOutputStream extends OutputStream
/** /**
@see java.io.DataOutputStream#write (byte[]) @see java.io.DataOutputStream#write (byte[])
*/ */
public void write (byte b[]) throws IOException public void write (byte[] b) throws IOException
{ {
write (b, 0, b.length); write (b, 0, b.length);
} }
@ -642,7 +642,7 @@ public class ObjectOutputStream extends OutputStream
/** /**
@see java.io.DataOutputStream#write (byte[],int,int) @see java.io.DataOutputStream#write (byte[],int,int)
*/ */
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)
{ {
@ -1175,19 +1175,32 @@ public class ObjectOutputStream extends OutputStream
private void callWriteMethod (Object obj) throws IOException private void callWriteMethod (Object obj) throws IOException
{ {
Class klass = obj.getClass ();
try try
{ {
Class classArgs[] = {Class.forName ("java.io.ObjectOutputStream")}; Class classArgs[] = {ObjectOutputStream.class};
Class klass = obj.getClass ();
Method m = getMethod (klass, "writeObject", classArgs); Method m = getMethod (klass, "writeObject", classArgs);
if (m == null) if (m == null)
return; return;
Object args[] = {this}; Object args[] = {this};
m.invoke (obj, args); m.invoke (obj, args);
} }
catch (Exception _) catch (InvocationTargetException x)
{ {
throw new IOException (); /* Rethrow if possible. */
Throwable exception = x.getTargetException();
if (exception instanceof RuntimeException)
throw (RuntimeException) exception;
if (exception instanceof IOException)
throw (IOException) exception;
throw new IOException ("Exception thrown from writeObject() on " +
klass + ": " + exception.getClass().getName());
}
catch (Exception x)
{
throw new IOException ("Failure invoking writeObject() on " +
klass + ": " + x.getClass().getName());
} }
} }
@ -1331,7 +1344,7 @@ public class ObjectOutputStream extends OutputStream
private static native Field getField (Class klass, String name) private static native Field getField (Class klass, String name)
throws java.lang.NoSuchFieldException; throws java.lang.NoSuchFieldException;
private static native Method getMethod (Class klass, String name, Class args[]) private static native Method getMethod (Class klass, String name, Class[] args)
throws java.lang.NoSuchMethodException; throws java.lang.NoSuchMethodException;
// 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