Looks like this method is still under development. How about this implementation?:

* Create a table "private static final int[] skipLength[256]". It's a lookup table from the head byte to format length. If the format is variable length (array, map, string, ext), it returns *negative* integer as following:
	* fix string: length | 0b_11111111_11111111_11111111_00000000
	* fix array: number_of_elements | 0b_11111111_11111111_11111110_00000000
	* fix map: (-number_of_elements) & 0b_11111111_11111111_11111101_00000000
	* fix ext:  (-length) & 0b_11111111_11111111_11111011_00000000
	* str8: 0b_11111111_11111111_11110111_00000001
	* str16: 0b_11111111_11111111_11110111_00000010
	* str32: 0b_11111111_11111111_11110111_00000100
	* map8: 0b_11111111_11111111_11101111_00000000
	* ...
* skip() lookups skipLength[lookAhead()]. If it's >= 0, skip that number of byte.
* otherwise, decode `type = skipLength[lookAhead()] & 0b_11111111_11111111_11111111_00000000` and `len = skipLength[lookAhead()] & 0b_11111111` then `switch(type) { case 0: consume(len); ... }

Benefit of this implementation is that skip() needs only 1 table lookup if the value is small (fix* formats).