Java tutorial
//package com.java2s; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.Reader; public class Main { private static char[] SKIP_CHAR_BUFFER; private static byte[] SKIP_BYTE_BUFFER; public static void skipFully(InputStream input, long toSkip) throws IOException { if (toSkip < 0L) { throw new IllegalArgumentException("Bytes to skip must not be negative: " + toSkip); } else { long skipped = skip(input, toSkip); if (skipped != toSkip) { throw new EOFException("Bytes to skip: " + toSkip + " actual: " + skipped); } } } public static void skipFully(Reader input, long toSkip) throws IOException { long skipped = skip(input, toSkip); if (skipped != toSkip) { throw new EOFException("Chars to skip: " + toSkip + " actual: " + skipped); } } public static long skip(InputStream input, long toSkip) throws IOException { if (toSkip < 0L) { throw new IllegalArgumentException("Skip count must be non-negative, actual: " + toSkip); } else { if (SKIP_BYTE_BUFFER == null) { SKIP_BYTE_BUFFER = new byte[2048]; } long remain; long n; for (remain = toSkip; remain > 0L; remain -= n) { n = (long) input.read(SKIP_BYTE_BUFFER, 0, (int) Math.min(remain, 2048L)); if (n < 0L) { break; } } return toSkip - remain; } } public static long skip(Reader input, long toSkip) throws IOException { if (toSkip < 0L) { throw new IllegalArgumentException("Skip count must be non-negative, actual: " + toSkip); } else { if (SKIP_CHAR_BUFFER == null) { SKIP_CHAR_BUFFER = new char[2048]; } long remain; long n; for (remain = toSkip; remain > 0L; remain -= n) { n = (long) input.read(SKIP_CHAR_BUFFER, 0, (int) Math.min(remain, 2048L)); if (n < 0L) { break; } } return toSkip - remain; } } 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); } }