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 NonblockingOutputStream is an OutputStream with nonblocking semantics.
31: * The various write() methods are <b>blocking</b>, while the
32: * nbWrite() methods are <b>nonblocking</b>. It was necessary to introduce
33: * new methods as the original write() calls return void, and hence there
34: * is no way to indicate that only a portion of the request was written.
35: */
36: public abstract class NonblockingOutputStream extends OutputStream {
37:
38: /**
39: * Perform a <b>blocking</b> write of one byte to this output stream.
40: * Throws an EOFException if the end of stream has been reached.
41: * Use nbWrite() to perform a non-blocking write of one byte.
42: */
43: public abstract void write(int b) throws IOException;
44:
45: /**
46: * Perform a blocking write of <code>b.length</code> bytes
47: * to the underlying stream. Use nbWrite() to perform a nonblocking
48: * write.
49: *
50: */
51: public abstract void write(byte b[]) throws IOException;
52:
53: /**
54: * Perform a blocking write of <code>len</code> bytes to the
55: * underlying stream from the byte array <code>b</code> starting at offset
56: * <code>off</code>. Use nbWrite() to perform a nonblocking write.
57: */
58: public abstract void write(byte b[], int off, int len)
59: throws IOException;
60:
61: /**
62: * Perform a non-blocking write of one byte to this output stream.
63: * Returns 1 if the data was written or 0 if it could not be.
64: * Throws an EOFException if the end of the stream has been reached.
65: * Use write() to perform a blocking write of one byte.
66: */
67: public abstract int nbWrite(byte b) throws IOException;
68:
69: /**
70: * Perform a nonblocking write of up to <code>b.length</code> bytes
71: * to the underlying stream. Returns the number of bytes written, or
72: * 0 if nothing was written. Use write() to perform a blocking
73: * write.
74: */
75: public abstract int nbWrite(byte b[]) throws IOException;
76:
77: /**
78: * Perform a nonblocking write of up to <code>len</code> bytes
79: * to the underlying stream starting at offset <code>off</code>.
80: * Returns the number of bytes written, or 0 if nothing was written.
81: * Use write() to perform a blocking write.
82: */
83: public abstract int nbWrite(byte b[], int off, int len)
84: throws IOException;
85:
86: /**
87: * Flush the underlying output stream. This is a <b>blocking</b> operation.
88: */
89: public abstract void flush();
90:
91: public abstract void close() throws IOException;
92:
93: }
|