gcc/libjava/java/io/SequenceInputStream.java

111 lines
2.2 KiB
Java

/* 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)
{
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;
if (enum != null)
{
if (enum.hasMoreElements())
nextIn = (InputStream) enum.nextElement();
}
else
if (in2 != null)
{
nextIn = in2;
in2 = null;
}
return nextIn;
}
}