/// <summary>Encoded byte buffer into new string.</summary> /// <param name="source">Decoded buffer.</param> /// <param name="arrayPool">Potentially <see cref="ArrayPool{T}"/> to allocate array /// for intermediate results.</param> /// <returns>New encoded string.</returns> public string Encode(ReadOnlySpan <byte> source, ArrayPool <char> arrayPool) { var targetLength = EncodedLength(source); if (targetLength == 0) { return(string.Empty); } var pooled = arrayPool.TryRent(sizeof(char), targetLength); try { var target = pooled ?? new char[targetLength]; var used = EncodeImpl(source, target.AsSpan()); return(new string(target, 0, used)); } finally { arrayPool.TryReturn(pooled); } }