docs: @Override
      public final long skip(final long n) throws IOException {
          if (n <= 0)
              return n;
          byte[] b = new byte[(int)Math.min(SKIP_BUF_SIZE, n)];
          long m = n; // remaining number of bytes to read
          while (m > 0) {
              int len = read(b, 0, (int)Math.min(m, b.length));
              if (len == -1)
                  return n - m;
              m -= len;
          }
          assert (m == 0);
          return n;
      }