home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / win95 / sieciowe / hotja32.lzh / hotjava / classsrc / java / io / inputstreamsequence.java < prev    next >
Text File  |  1995-08-11  |  1KB  |  84 lines

  1. /*
  2.  * Copyright (c) 1994 by Sun Microsystems, Inc.
  3.  * All Rights Reserved.
  4.  *
  5.  * @(#)InputStreamSequence.java    1.4 95/01/31 94/10/25
  6.  *
  7.  * November 1994, Arthur van Hoff
  8.  */
  9.  
  10. package java.io;
  11.  
  12. import java.io.InputStream;
  13. import java.util.Enumeration;
  14. import java.util.Vector;
  15.  
  16. /**
  17.  * Converts a sequence of input streams into an InputStream
  18.  */
  19. public
  20. class InputStreamSequence extends InputStream {
  21.     Enumeration e;
  22.     InputStream in;
  23.     
  24.     /**
  25.      * Constructor
  26.      */
  27.     public InputStreamSequence(Enumeration e) {
  28.     this.e = e;
  29.     nextStream();
  30.     }
  31.  
  32.     public InputStreamSequence(InputStream s1, InputStream s2) {
  33.     Vector    v = new Vector(2);
  34.  
  35.     v.addElement(s1);
  36.     v.addElement(s2);
  37.     e = v.elements();
  38.     nextStream();
  39.     }
  40.  
  41.     final void nextStream() {
  42.     if (in != null) {
  43.         in.close();
  44.     }
  45.     in = e.hasMoreElements() ? (InputStream) e.nextElement() : null;
  46.     }
  47.  
  48.     /**
  49.      * Reads, upon reaching an EOF, flips to the next stream.
  50.      */
  51.     public int read() {
  52.     if (in == null) {
  53.         return -1;
  54.     }
  55.     int c = in.read();
  56.     if (c == -1) {
  57.         nextStream();
  58.         return read();
  59.     }
  60.     return c;
  61.     }
  62.  
  63.     /**
  64.      * Reads, upon reaching an EOF, flips to the next stream.
  65.      */
  66.     public int read(byte buf[], int pos, int len) {
  67.     if (in == null) {
  68.         return -1;
  69.     }
  70.     int n = in.read(buf, pos, len);
  71.     if (n <= 0) {
  72.         nextStream();
  73.         return read(buf, pos + n, len - n);
  74.     }
  75.     return n;
  76.     }
  77.  
  78.     public void close() {
  79.     do {
  80.         nextStream();
  81.     } while (in != null);
  82.     }
  83. }
  84.