public long skip(long n) throws IOException {
        if (n <= 0) return 0;
        //similar idea to read(byte[], int, int)
        if (!iProcessedTwoBytes) {
            int skipped = 0;
            while (iReadBytes < 2 && n > 0) {
                int x = iFirstTwo[iReadBytes];
                if (x == -1) {
                    iProcessedTwoBytes = true;
                    return skipped;
                }
                iReadBytes++;
                skipped++;
                n--;
            }
            if (iReadBytes == 2) {
                iProcessedTwoBytes = true;
            }
            long restSkip = iInStream.skip(n);
            return restSkip + 2;
        }
        else return iInStream.skip(n);
    }