asclass InputStreamPlusReadFully extends InputStream { public void readFully(byte[] buf) throws IOException { int read = 0; while (read < length) { int r = read(destination, offset+read, length-read); if (r == -1) throw new EOFException("Asked to read " + length + " bytes from " + offset + " but hit EoF at " + read); else read += r; } } }