Java tutorial
//package com.java2s; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.Reader; public class Main { public static void readFully(Reader input, char[] buffer, int offset, int length) throws IOException { int actual = read(input, buffer, offset, length); if (actual != length) { throw new EOFException("Length to read: " + length + " actual: " + actual); } } public static void readFully(Reader input, char[] buffer) throws IOException { readFully((Reader) input, (char[]) buffer, 0, buffer.length); } public static void readFully(InputStream input, byte[] buffer, int offset, int length) throws IOException { int actual = read(input, buffer, offset, length); if (actual != length) { throw new EOFException("Length to read: " + length + " actual: " + actual); } } public static void readFully(InputStream input, byte[] buffer) throws IOException { readFully((InputStream) input, (byte[]) buffer, 0, buffer.length); } public static int read(Reader input, char[] buffer, int offset, int length) throws IOException { if (length < 0) { throw new IllegalArgumentException("Length must not be negative: " + length); } else { int remaining; int count; for (remaining = length; remaining > 0; remaining -= count) { int location = length - remaining; count = input.read(buffer, offset + location, remaining); if (-1 == count) { break; } } return length - remaining; } } public static int read(Reader input, char[] buffer) throws IOException { return read((Reader) input, (char[]) buffer, 0, buffer.length); } public static int read(InputStream input, byte[] buffer, int offset, int length) throws IOException { if (length < 0) { throw new IllegalArgumentException("Length must not be negative: " + length); } else { int remaining; int count; for (remaining = length; remaining > 0; remaining -= count) { int location = length - remaining; count = input.read(buffer, offset + location, remaining); if (-1 == count) { break; } } return length - remaining; } } public static int read(InputStream input, byte[] buffer) throws IOException { return read((InputStream) input, (byte[]) buffer, 0, buffer.length); } }