diff options
Diffstat (limited to 'libjava/java/io/InputStream.java')
-rw-r--r-- | libjava/java/io/InputStream.java | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/libjava/java/io/InputStream.java b/libjava/java/io/InputStream.java new file mode 100644 index 0000000..cc86efd --- /dev/null +++ b/libjava/java/io/InputStream.java @@ -0,0 +1,104 @@ +/* Copyright (C) 1998, 1999 Cygnus Solutions + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +package java.io; + +/** + * @author Warren Levy <warrenl@cygnus.com> + * @date October 2, 1998. + */ +/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 + * "The Java Language Specification", ISBN 0-201-63451-1 + * plus online API docs for JDK 1.2 beta from http://www.javasoft.com. + * Status: Believed complete and correct. + */ + +public abstract class InputStream +{ + public InputStream() + { + } + + public int available() throws IOException + { + return 0; + } + + public void close() throws IOException + { + // Do nothing + } + + public void mark(int readlimit) + { + // Do nothing + } + + public boolean markSupported() + { + return false; + } + + public abstract int read() throws IOException; + + public int read(byte[] b) throws IOException + { + return read(b, 0, b.length); + } + + public int read(byte[] b, int off, int len) throws IOException + { + if (off < 0 || len < 0 || off + len > b.length) + throw new IndexOutOfBoundsException(); + if (b.length == 0) + return 0; + + int i, ch; + + for (i = 0; i < len; ++i) + try + { + if ((ch = read()) < 0) + return i == 0 ? -1 : i; // EOF + b[off + i] = (byte) ch; + } + catch (IOException ex) + { + // Only reading the first byte should cause an IOException. + if (i == 0) + throw ex; + return i; + } + + return i; + } + + public void reset() throws IOException + { + throw new IOException("mark/reset not supported"); + } + + public long skip(long n) throws IOException + { + // Throw away n bytes by reading them into a temp byte[]. + // Limit the temp array to 2Kb so we don't grab too much memory. + final int buflen = n > 2048 ? 2048 : (int) n; + byte[] tmpbuf = new byte[buflen]; + final long origN = n; + + while (n > 0L) + { + int numread = read(tmpbuf, 0, n > buflen ? buflen : (int) n); + if (numread <= 0) + break; + n -= numread; + } + + return origN - n; + } +} |