aboutsummaryrefslogtreecommitdiff
path: root/libjava/java/io/SequenceInputStream.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/io/SequenceInputStream.java')
-rw-r--r--libjava/java/io/SequenceInputStream.java112
1 files changed, 112 insertions, 0 deletions
diff --git a/libjava/java/io/SequenceInputStream.java b/libjava/java/io/SequenceInputStream.java
new file mode 100644
index 0000000..7713517
--- /dev/null
+++ b/libjava/java/io/SequenceInputStream.java
@@ -0,0 +1,112 @@
+/* Copyright (C) 1998, 1999 Cygnus Solutions
+
+ 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;
+
+import java.util.Enumeration;
+
+/**
+ * @author Warren Levy <warrenl@cygnus.com>
+ * @date November 3, 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 class SequenceInputStream extends InputStream
+{
+ /* The handle for the current input stream. */
+ private InputStream in;
+
+ /* Secondary input stream; not used if constructed w/ enumeration. */
+ private InputStream in2;
+
+ /* The enum handle; not used if constructed w/ 2 explicit input streams. */
+ private Enumeration enum;
+
+ public SequenceInputStream(Enumeration e)
+ {
+ // FIXME: Assumes that enum contains only InputStreams.
+ enum = e;
+ in = (InputStream) enum.nextElement();
+ in2 = null;
+ }
+
+ public SequenceInputStream(InputStream s1, InputStream s2)
+ {
+ in = s1;
+ in2 = s2;
+ }
+
+ public int available() throws IOException
+ {
+ if (in == null)
+ return 0;
+
+ return in.available();
+ }
+
+ public void close() throws IOException
+ {
+ while (in != null)
+ {
+ in.close();
+ in = getNextStream ();
+ }
+ }
+
+ public int read() throws IOException
+ {
+ int ch = -1;
+
+ while (in != null && (ch = in.read()) < 0)
+ {
+ in.close();
+ in = getNextStream();
+ }
+
+ return ch;
+ }
+
+ public int read(byte[] b, int off, int len) throws IOException
+ {
+ int ch = -1;
+
+ // The validity of the parameters will be checked by in.read so
+ // don't bother doing it here.
+ while (in != null && (ch = in.read(b, off, len)) < 0)
+ {
+ in.close();
+ in = getNextStream();
+ }
+
+ return ch;
+ }
+
+ private InputStream getNextStream()
+ {
+ InputStream nextIn = null;
+
+ // FIXME: Assumes that enum contains only InputStreams.
+ if (enum != null)
+ {
+ if (enum.hasMoreElements())
+ nextIn = (InputStream) enum.nextElement();
+ }
+ else
+ if (in2 != null)
+ {
+ nextIn = in2;
+ in2 = null;
+ }
+
+ return nextIn;
+ }
+}