01: /*
02: * Copyright (c) 2000 by Matt Welsh and The Regents of the University of
03: * California. All rights reserved.
04: *
05: * Permission to use, copy, modify, and distribute this software and its
06: * documentation for any purpose, without fee, and without written agreement is
07: * hereby granted, provided that the above copyright notice and the following
08: * two paragraphs appear in all copies of this software.
09: *
10: * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
11: * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
12: * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
13: * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
14: *
15: * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
16: * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
17: * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
18: * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
19: * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
20: *
21: * Author: Matt Welsh <mdw@cs.berkeley.edu>
22: *
23: */
24:
25: package seda.nbio;
26:
27: import java.io.*;
28:
29: /**
30: * A NonblockingInputStream is an InputStream which implements nonblocking
31: * semantics. The only additional method is nbRead() which performs a
32: * nonblocking read of one byte. The read(byte[]) and read(byte[], int, int)
33: * methods are also nonblocking. The standard read(byte) call is blocking
34: * as there is no way to indicate that nothing was read (a -1 means
35: * an error occurred).
36: */
37: public abstract class NonblockingInputStream extends InputStream {
38:
39: /**
40: * Perform a <b>blocking</b> read of one byte from this input stream.
41: * Returns -1 if the end of the stream has been reached.
42: * Use nbRead() to perform a non-blocking read of one byte.
43: */
44: public abstract int read() throws IOException;
45:
46: /**
47: * Perform a non-blocking read of one byte from this input stream.
48: * Returns -1 if no data is available, or throws an EOFException if the
49: * end of the stream has been reached. Use read() to perform a blocking
50: * read of one byte.
51: */
52: public abstract int nbRead() throws IOException;
53:
54: /**
55: * Perform a non-blocking read of up to <code>b.length</code> bytes
56: * from the underlying stream.
57: *
58: * @return The total number of bytes read into the buffer, 0 if
59: * no data was available, or -1 if the end of the stream has
60: * been reached.
61: *
62: */
63: public abstract int read(byte b[]) throws IOException;
64:
65: /**
66: * Perform a non-blocking read of up to <code>len</code> bytes from the
67: * underlying stream into the byte array <code>b</code> starting at offset
68: * <code>off</code>.
69: *
70: * @return The total number of bytes read into the buffer, 0 if
71: * no data was available, or -1 if the end of the stream has
72: * been reached.
73: */
74: public abstract int read(byte b[], int off, int len)
75: throws IOException;
76:
77: /**
78: * Skip n bytes of input. This is a <b>blocking</b> operation.
79: */
80: public abstract long skip(long n) throws IOException;
81:
82: public abstract int available() throws IOException;
83:
84: public abstract void close() throws IOException;
85:
86: }
|