Hi David,
It looks like this bug may already be fixed in GNU Classpath:
2004-12-07 Jeroen Frijters <jeroen@frijters.net>
* java/io/BufferedInputStream.java
(skip): Don't return -1 on EOF.
2004-12-06 Jeroen Frijters <jeroen@frijters.net>
* java/io/BufferedInputStream.java
(read(byte,int,int)): Handle case when zero bytes are requested.
2004-07-10 Jeroen Frijters <jeroen@frijters.net>
* java/io/BufferedInputStream.java (count, pos, marklimit): Removed
unnecessary initialization. (marktarget, CHUNKSIZE): Removed.
(bufferSize): New field. (close): Reset state. (read()): Removed
unnecessary cast. (read(byte[],int,int): Try harder to read the
requested number of bytes. (mark,reset,refill): Fixed handling of
marking. (skip): Added stream closed check and removed mark
handling.
Since this class ought to be merged, could you try using
BufferedInputStream.java from Classpath and see if that fixes it?