@Override public long skipBytes(long n) throws IOException { long skipped = 0; try { for (long i=0; i<n; i++) { if (readUnsignedByte() != -1) skipped++; markManager(); } } catch (EOFException e) { } return skipped; }
@Override public int skipBytes(int n) throws IOException { int skipped = 0; try { for (int i=0; i<n; i++) { if (readUnsignedByte() != -1) skipped++; markManager(); } } catch (EOFException e) { } return skipped; }
@Override public int read(byte[] b, int off, int len) throws IOException { int n = stream.read(b, off, len); if (n >= 0) fp += n; else n = 0; markManager(); while (n < len && fp < length()) { int s = stream.read(b, off + n, len - n); fp += s; n += s; } return n == -1 ? 0 : n; }
@Override public int read(byte[] b, int off, int len) throws IOException { LOGGER.trace("{} {}", off, len); int n = stream.read(b, off, len); if (n >= 0) fp += n; else n = 0; markManager(); while (n < len && fp < length()) { int s = stream.read(b, off + n, len - n); fp += s; n += s; } return n == -1 ? 0 : n; }
@Override public void seek(long pos) throws IOException { LOGGER.trace("{}", pos); long diff = pos - fp; fp = pos; if (diff < 0) { // resetStream sets the fp to 0 resetStream(); diff = pos; fp = pos; } int skipped = stream.skipBytes((int) diff); while (skipped < diff) { int n = stream.skipBytes((int) (diff - skipped)); if (n == 0) break; skipped += n; } markManager(); }