View Javadoc

    1   package org.archive.io;
    2
    3   import java.io.IOException;
    4
    5   public class SeekReaderCharSequence implements CharSequence {
    6
    7
    8       final private SeekReader reader;
    9       final private int size;
    10
    11
    12      public SeekReaderCharSequence(SeekReader reader, int size) {
    13          this.reader = reader;
    14          this.size = size;
    15      }
    16
    17
    18      public int length() {
    19          return size;
    20      }
    21
    22
    23      public char charAt(int index) {
    24          if ((index < 0) || (index >= length())) {
    25              throw new IndexOutOfBoundsException(Integer.toString(index));
    26          }
    27          try {
    28              reader.position(index);
    29              int r = reader.read();
    30              if (r < 0) {
    31                  throw new IllegalStateException("EOF");
    32              }
    33              return (char)reader.read();
    34          } catch (IOException e) {
    35              throw new RuntimeException(e);
    36          }
    37      }
    38
    39
    40      public CharSequence subSequence(int start, int end) {
    41          return new CharSubSequence(this, start, end);
    42      }
    43
    44      public String toString() {
    45          StringBuilder sb = new StringBuilder();
    46          try {
    47              reader.position(0);
    48              for (int ch = reader.read(); ch >= 0; ch = reader.read()) {
    49                  sb.append((char)ch);
    50              }
    51              return sb.toString();
    52          } catch (IOException e) {
    53              throw new IllegalStateException(e);
    54          }
    55      }
    56  }