public ArraySegment <byte> ReadNumberSegment() { SkipWhiteSpace(); var initialOffset = _offset; for (var i = _offset; i < _bytes.Length; i++) { if (!NumberConverter.IsNumberRepresentation(_bytes[i])) { if (NumberConverter.IsENotation(_bytes[i]) && (i + 1) < _bytes.Length && NumberConverter.IsNumberRepresentation(_bytes[i + 1])) { i++; continue; } _offset = i; goto END; } } _offset = _bytes.Length; END: return(new ArraySegment <byte>(_bytes, initialOffset, _offset - initialOffset)); }