@Override
	public long skip(long n) throws IOException {
		fireBeforeDecorateHead();
		if (head != null && hPoint < head.length) {
			int dlen = head.length - hPoint;
			int r = dlen < n ? dlen : (int) n;
			hPoint += r;
			fireAfterDecorateHead();
			return r;
		}
		fireAfterDecorateHead();

		long i = super.skip(n);

		if (i == 0 && ((EOFFeature) in).isEOF()) {
			fireBeforeDecorateTail();
			if (tail != null && tPoint < tail.length) {
				int dlen = tail.length - tPoint;
				int r = dlen < n ? dlen : (int) n;
				tPoint += r;
				fireAfterDecorateTail();
				return r;
			}
			fireAfterDecorateTail();
		}

		return i;
	}