private static bool TryGetBufferedLengthPrefixedString( Utf8Memory stringToken, out Utf8Memory value) { ReadOnlySpan <byte> stringTokenSpan = stringToken.Memory.Span; byte typeMarker = stringTokenSpan[0]; stringTokenSpan = stringTokenSpan.Slice(start: 1); int start; long length; if (JsonBinaryEncoding.TypeMarker.IsEncodedLengthString(typeMarker)) { start = JsonBinaryEncoding.TypeMarkerLength; length = JsonBinaryEncoding.GetStringLengths(typeMarker); } else { switch (typeMarker) { case JsonBinaryEncoding.TypeMarker.String1ByteLength: if (stringTokenSpan.Length < JsonBinaryEncoding.OneByteLength) { value = default; return(false); } start = JsonBinaryEncoding.TypeMarkerLength + JsonBinaryEncoding.OneByteLength; length = stringTokenSpan[0]; break; case JsonBinaryEncoding.TypeMarker.String2ByteLength: if (stringTokenSpan.Length < JsonBinaryEncoding.TwoByteLength) { value = default; return(false); } start = JsonBinaryEncoding.TypeMarkerLength + JsonBinaryEncoding.TwoByteLength; length = MemoryMarshal.Read <ushort>(stringTokenSpan); break; case JsonBinaryEncoding.TypeMarker.String4ByteLength: if (stringTokenSpan.Length < JsonBinaryEncoding.FourByteLength) { value = default; return(false); } start = JsonBinaryEncoding.TypeMarkerLength + JsonBinaryEncoding.FourByteLength; length = MemoryMarshal.Read <uint>(stringTokenSpan); break; default: value = default; return(false); } if ((start + length) > stringToken.Length) { value = default; return(false); } } value = stringToken.Slice(start: start, length: (int)length); return(true); }