2000-03-07 20:55:28 +01:00
|
|
|
/* Copyright (C) 1998, 1999 Free Software Foundation
|
1999-04-07 16:42:40 +02:00
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|