Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (C) 2007 The Guava Authors
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 package com.google.common.io;
 
An java.io.InputStream that concatenates multiple substreams. At most one stream will be open at a time.

Author(s):
Chris Nokleberg
Since:
1.0
 
 final class MultiInputStream extends InputStream {
 
   private Iterator<? extends InputSupplier<? extends InputStream>> it;
   private InputStream in;

  
Creates a new instance.

Parameters:
it an iterator of I/O suppliers that will provide each substream
 
   public MultiInputStream(
       Iterator<? extends InputSupplier<? extends InputStream>> it)
       throws IOException {
     this. = it;
     advance();
   }
 
   @Override public void close() throws IOException {
     if ( != null) {
       try {
         .close();
       } finally {
          = null;
       }
     }
   }

  
Closes the current input stream and opens the next one, if any.
 
   private void advance() throws IOException {
     close();
     if (.hasNext()) {
        = .next().getInput();
     }
   }
 
   @Override public int available() throws IOException {
     if ( == null) {
       return 0;
     }
     return .available();
   }
 
   @Override public boolean markSupported() {
     return false;
   }
 
   @Override public int read() throws IOException {
     if ( == null) {
       return -1;
     }
     int result = .read();
     if (result == -1) {
       advance();
       return read();
     }
     return result;
   }
 
   @Override public int read(byte[] bint offint lenthrows IOException {
     if ( == null) {
       return -1;
     }
     int result = .read(bofflen);
     if (result == -1) {
       advance();
       return read(bofflen);
     }
     return result;
  }
  @Override public long skip(long nthrows IOException {
    if ( == null || n <= 0) {
      return 0;
    }
    long result = .skip(n);
    if (result != 0) {
      return result;
    }
    if (read() == -1) {
      return 0;
    }
    return 1 + .skip(n - 1);
  }
New to GrepCode? Check out our FAQ X