Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 /*
  * Copyright (C) 2008 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;
A java.io.Reader that concatenates multiple readers.

Author(s):
Bin Zhu
Since:
1.0
class MultiReader extends Reader {
  private final Iterator<? extends InputSupplier<? extends Reader>> it;
  private Reader current;
  MultiReader(Iterator<? extends InputSupplier<? extends Reader>> readers)
      throws IOException {
    this. = readers;
    advance();
  }

  
Closes the current reader and opens the next one, if any.
  private void advance() throws IOException {
    close();
    if (.hasNext()) {
       = .next().getInput();
    }
  }
  @Override public int read(char cbuf[], int offint lenthrows IOException {
    if ( == null) {
      return -1;
    }
    int result = .read(cbufofflen);
    if (result == -1) {
      advance();
      return read(cbufofflen);
    }
    return result;
  }
  @Override public long skip(long nthrows IOException {
    Preconditions.checkArgument(n >= 0, "n is negative");
    if (n > 0) {
      while ( != null) {
        long result = .skip(n);
        if (result > 0) {
          return result;
        }
        advance();
      }
    }
    return 0;
  }
  @Override public boolean ready() throws IOException {
    return ( != null) && .ready();
  }
  @Override public void close() throws IOException {
    if ( != null) {
      try {
        .close();
      } finally {
         = null;
      }
    }
  }
New to GrepCode? Check out our FAQ X