Example #1
0
  public int read(byte[] buffer, int pos, int len) throws IOException {

    if (transparent) {

      return (input.read(buffer, pos, len));
    }

    // [header]
    // file [body-start -> body-end]

    long start_pos = seek_position;
    int start_len = len;

    if (seek_position < header.length) {

      int rem = (int) (header.length - seek_position);

      if (rem > len) {

        rem = len;
      }

      System.arraycopy(header, (int) seek_position, buffer, pos, rem);

      pos += rem;
      len -= rem;

      seek_position += rem;
    }

    if (len > 0) {

      long file_position = body_start + seek_position - header.length;

      long rem = body_end - file_position;

      if (len < rem) {

        rem = len;
      }

      input.seek(file_position);

      int temp = input.read(buffer, pos, (int) rem);

      pos += temp;
      len -= temp;

      seek_position += temp;
    }

    int read = start_len - len;

    seek_position = start_pos + read;

    return (read);
  }