www.pudn.com > j2me_cldc-1_1-fcs-src-winunix.rar > InputStream.java
/* * Copyright © 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * */ package java.io; /** * This abstract class is the superclass of all classes representing * an input stream of bytes. * *Applications that need to define a subclass of
InputStream* must always provide a method that returns the next byte of input. * * @author Arthur van Hoff * @version 12/17/01 (CLDC 1.1) * @see java.io.ByteArrayInputStream * @see java.io.DataInputStream * @see java.io.InputStream#read() * @see java.io.OutputStream * @since JDK1.0, CLDC 1.0 */ public abstract class InputStream { /** * Reads the next byte of data from the input stream. The value byte is * returned as anintin the range0to *255. If no byte is available because the end of the stream * has been reached, the value-1is returned. This method * blocks until input data is available, the end of the stream is detected, * or an exception is thrown. * *A subclass must provide an implementation of this method. * * @return the next byte of data, or
-1if the end of the * stream is reached. * @exception IOException if an I/O error occurs. */ public abstract int read() throws IOException; /** * Reads some number of bytes from the input stream and stores them into * the buffer arrayb. The number of bytes actually read is * returned as an integer. This method blocks until input data is * available, end of file is detected, or an exception is thrown. * *If
bisnull, a *NullPointerExceptionis thrown. If the length of *bis zero, then no bytes are read and0is * returned; otherwise, there is an attempt to read at least one byte. If * no byte is available because the stream is at end of file, the value *-1is returned; otherwise, at least one byte is read and * stored intob. * *The first byte read is stored into element
b[0], the * next one intob[1], and so on. The number of bytes read is, * at most, equal to the length ofb. Let k be the * number of bytes actually read; these bytes will be stored in elements *b[0]throughb[k-1], * leaving elementsb[k]through *b[b.length-1]unaffected. * *If the first byte cannot be read for any reason other than end of * file, then an
IOExceptionis thrown. In particular, an *IOExceptionis thrown if the input stream has been closed. * *The
read(b)method for classInputStream* has the same effect as:* * @param b the buffer into which the data is read. * @return the total number of bytes read into the buffer, or *read(b, 0, b.length)-1is there is no more data because the end of * the stream has been reached. * @exception IOException if an I/O error occurs. * @see java.io.InputStream#read(byte[], int, int) */ public int read(byte b[]) throws IOException { return read(b, 0, b.length); } /** * Reads up tolenbytes of data from the input stream into * an array of bytes. An attempt is made to read as many as *lenbytes, but a smaller number may be read, possibly * zero. The number of bytes actually read is returned as an integer. * *This method blocks until input data is available, end of file is * detected, or an exception is thrown. * *
If
bisnull, a *NullPointerExceptionis thrown. * *If
offis negative, orlenis negative, or *off+lenis greater than the length of the array *b, then anIndexOutOfBoundsExceptionis * thrown. * *If
lenis zero, then no bytes are read and *0is returned; otherwise, there is an attempt to read at * least one byte. If no byte is available because the stream is at end of * file, the value-1is returned; otherwise, at least one * byte is read and stored intob. * *The first byte read is stored into element
b[off], the * next one intob[off+1], and so on. The number of bytes read * is, at most, equal tolen. Let k be the number of * bytes actually read; these bytes will be stored in elements *b[off]throughb[off+k-1], * leaving elementsb[off+k]through *b[off+len-1]unaffected. * *In every case, elements
b[0]through *b[off]and elementsb[off+len]through *b[b.length-1]are unaffected. * *If the first byte cannot be read for any reason other than end of * file, then an
IOExceptionis thrown. In particular, an *IOExceptionis thrown if the input stream has been closed. * *The
read(b,off,len)method * for classInputStreamsimply calls the method *read()repeatedly. If the first such call results in an *IOException, that exception is returned from the call to * theread(b,off,len)method. If * any subsequent call toread()results in a *IOException, the exception is caught and treated as if it * were end of file; the bytes read up to that point are stored into *band the number of bytes read before the exception * occurred is returned. Subclasses are encouraged to provide a more * efficient implementation of this method. * * @param b the buffer into which the data is read. * @param off the start offset in arrayb* at which the data is written. * @param len the maximum number of bytes to read. * @return the total number of bytes read into the buffer, or *-1if there is no more data because the end of * the stream has been reached. * @exception IOException if an I/O error occurs. * @see java.io.InputStream#read() */ public int read(byte b[], int off, int len) throws IOException { if (b == null) { throw new NullPointerException(); } else if ((off < 0) || (off > b.length) || (len < 0) || ((off + len) > b.length) || ((off + len) < 0)) { throw new IndexOutOfBoundsException(); } else if (len == 0) { return 0; } int c = read(); if (c == -1) { return -1; } b[off] = (byte)c; int i = 1; try { for (; i < len ; i++) { c = read(); if (c == -1) { break; } if (b != null) { b[off + i] = (byte)c; } } } catch (IOException ee) { } return i; } /** * Skips over and discardsnbytes of data from this input * stream. Theskipmethod may, for a variety of reasons, end * up skipping over some smaller number of bytes, possibly0. * This may result from any of a number of conditions; reaching end of file * beforenbytes have been skipped is only one possibility. * The actual number of bytes skipped is returned. Ifnis * negative, no bytes are skipped. * *The
skipmethod ofInputStreamcreates a * byte array and then repeatedly reads into it untilnbytes * have been read or the end of the stream has been reached. Subclasses are * encouraged to provide a more efficient implementation of this method. * * @param n the number of bytes to be skipped. * @return the actual number of bytes skipped. * @exception IOException if an I/O error occurs. */ public long skip(long n) throws IOException { long m = n; while (m > 0) { if (read() < 0) { break; } --m; } return n-m; } /** * Returns the number of bytes that can be read (or skipped over) from * this input stream without blocking by the next caller of a method for * this input stream. The next caller might be the same thread or * another thread. * *The
availablemethod for classInputStream* always returns0. * *This method should be overridden by subclasses. * * @return the number of bytes that can be read from this input stream * without blocking. * @exception IOException if an I/O error occurs. */ public int available() throws IOException { return 0; } /** * Closes this input stream and releases any system resources associated * with the stream. * *
The
closemethod ofInputStreamdoes * nothing. * * @exception IOException if an I/O error occurs. */ public void close() throws IOException {} /** * Marks the current position in this input stream. A subsequent call to * theresetmethod repositions this stream at the last marked * position so that subsequent reads re-read the same bytes. * *The
readlimitarguments tells this input stream to * allow that many bytes to be read before the mark position gets * invalidated. * *The general contract of
markis that, if the method *markSupportedreturnstrue, the stream somehow * remembers all the bytes read after the call tomarkand * stands ready to supply those same bytes again if and whenever the method *resetis called. However, the stream is not required to * remember any data at all if more thanreadlimitbytes are * read from the stream beforeresetis called. * *The
markmethod ofInputStreamdoes * nothing. * * @param readlimit the maximum limit of bytes that can be read before * the mark position becomes invalid. * @see java.io.InputStream#reset() */ public synchronized void mark(int readlimit) {} /** * Repositions this stream to the position at the time the *markmethod was last called on this input stream. * *The general contract of
resetis: * *
markSupported returns
* true, then:
*
* mark has not been called since
* the stream was created, or the number of bytes read from the stream
* since mark was last called is larger than the argument
* to mark at that last call, then an
* IOException might be thrown.
*
* IOException is not thrown, then the
* stream is reset to a state such that all the bytes read since the
* most recent call to mark (or since the start of the
* file, if mark has not been called) will be resupplied
* to subsequent callers of the read method, followed by
* any bytes that otherwise would have been the next input data as of
* the time of the call to reset. markSupported returns
* false, then:
*
* reset may throw an
* IOException.
*
* IOException is not thrown, then the stream
* is reset to a fixed state that depends on the particular type of the
* input stream and how it was created. The bytes that will be supplied
* to subsequent callers of the read method depend on the
* particular type of the input stream. The method reset for class InputStream
* does nothing and always throws an IOException.
*
* @exception IOException if this stream has not been marked or if the
* mark has been invalidated.
* @see java.io.InputStream#mark(int)
* @see java.io.IOException
*/
public synchronized void reset() throws IOException {
throw new IOException("mark/reset not supported");
}
/**
* Tests if this input stream supports the mark and
* reset methods. The markSupported method of
* InputStream returns false.
*
* @return true if this true type supports the mark and reset
* method; false otherwise.
* @see java.io.InputStream#mark(int)
* @see java.io.InputStream#reset()
*/
public boolean markSupported() {
return false;
}
}