private static unsafe bool IsCacheValid(ByteArrayReaderCache <ByteArray, string> byteArrayCache, ByteArray byteArray, string str) { var byteCount = System.Text.Encoding.UTF8.GetByteCount(str); var buffer = byteArrayCache.GetScratchBuffer(byteCount); System.Text.Encoding.UTF8.GetBytes(str, 0, str.Length, buffer, 0); var cached = new ReadOnlySpan <byte>((void *)byteArray.Pointer, byteArray.Length); var expected = buffer.AsSpan(0, byteCount); return(cached.SequenceEqual(expected)); }
private static unsafe string ToString(ByteArray byteArray) { return(byteArray.Length == 0 ? string.Empty : System.Text.Encoding.UTF8.GetString((byte *)byteArray.Pointer, byteArray.Length)); }
private static string ToString(ByteArray byteArray, ByteArrayReaderCache <ByteArray, string> byteArrayCache) { return(byteArrayCache.TryGetValue(byteArray, out var value) ? value : byteArrayCache.Add(byteArray, ToString(byteArray))); }