home *** CD-ROM | disk | FTP | other *** search
Java Source | 1996-05-03 | 3.4 KB | 130 lines |
- /*
- * @(#)SequenceInputStream.java 1.10 95/11/13 Arthur van Hoff
- *
- * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
- *
- * Permission to use, copy, modify, and distribute this software
- * and its documentation for NON-COMMERCIAL purposes and without
- * fee is hereby granted provided that this copyright notice
- * appears in all copies. Please refer to the file "copyright.html"
- * for further important copyright and licensing information.
- *
- * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
- * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
- * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
- * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
- * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
- * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
- */
-
- package java.io;
-
- import java.io.InputStream;
- import java.util.Enumeration;
- import java.util.Vector;
-
- /**
- * Converts a sequence of input streams into an InputStream.
- *
- * @author Author van Hoff
- * @version 1.10, 13 Nov 1995
- */
- public
- class SequenceInputStream extends InputStream {
- Enumeration e;
- InputStream in;
-
- /**
- * Constructs a new SequenceInputStream initialized to the
- * specified list.
- * @param e the list
- */
- public SequenceInputStream(Enumeration e) {
- this.e = e;
- try {
- nextStream();
- } catch (IOException ex) {
- // This should never happen
- throw new Error("panic");
- }
- }
-
- /**
- * Constructs a new SequenceInputStream initialized to the two
- * specified input streams.
- * @param s1 the first input stream
- * @param s2 the second input stream
- */
- public SequenceInputStream(InputStream s1, InputStream s2) {
- Vector v = new Vector(2);
-
- v.addElement(s1);
- v.addElement(s2);
- e = v.elements();
- try {
- nextStream();
- } catch (IOException ex) {
- // This should never happen
- throw new Error("panic");
- }
- }
-
- /**
- * Continues reading in the next stream if an EOF is reached.
- */
- final void nextStream() throws IOException {
- if (in != null) {
- in.close();
- }
- in = e.hasMoreElements() ? (InputStream) e.nextElement() : null;
- }
-
- /**
- * Reads a stream, and upon reaching an EOF, flips to the next
- * stream.
- */
- public int read() throws IOException {
- if (in == null) {
- return -1;
- }
- int c = in.read();
- if (c == -1) {
- nextStream();
- return read();
- }
- return c;
- }
-
- /**
- * Reads data into an array of bytes, and upon reaching an EOF,
- * flips to the next stream.
- * @param buf the buffer into which the data is read
- * @param pos the start position of the data
- * @param len the maximum number of bytes read
- * @exception IOException If an I/O error has occurred.
- */
- public int read(byte buf[], int pos, int len) throws IOException {
- if (in == null) {
- return -1;
- }
- int n = in.read(buf, pos, len);
- if (n <= 0) {
- nextStream();
- return read(buf, pos, len);
- }
- return n;
- }
-
- /**
- * Closes the input stream; flipping to the next stream,
- * if an EOF is reached. This method must be called to release
- * any resources associated with the stream.
- * @exception IOException If an I/O error has occurred.
- */
- public void close() throws IOException {
- do {
- nextStream();
- } while (in != null);
- }
- }
-