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:
parent
31e1e0a652
commit
60b7365f52
|
@ -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
|
||||||
|
|
|
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue