mirror of
https://github.com/adamhathcock/sharpcompress.git
synced 2026-07-09 10:37:04 +00:00
72 lines
1.7 KiB
C#
72 lines
1.7 KiB
C#
using System;
|
|
using System.Buffers;
|
|
using System.IO;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace SharpCompress;
|
|
|
|
public static class StreamExtensions
|
|
{
|
|
extension(Stream stream)
|
|
{
|
|
public void Skip(long advanceAmount)
|
|
{
|
|
if (stream.CanSeek)
|
|
{
|
|
stream.Position += advanceAmount;
|
|
return;
|
|
}
|
|
|
|
using var readOnlySubStream = new IO.ReadOnlySubStream(stream, advanceAmount);
|
|
readOnlySubStream.CopyTo(Stream.Null);
|
|
}
|
|
|
|
public void Skip() => stream.CopyTo(Stream.Null);
|
|
|
|
public Task SkipAsync(CancellationToken cancellationToken = default)
|
|
{
|
|
cancellationToken.ThrowIfCancellationRequested();
|
|
#if NET8_0_OR_GREATER
|
|
return stream.CopyToAsync(Stream.Null, cancellationToken);
|
|
#else
|
|
return stream.CopyToAsync(Stream.Null);
|
|
#endif
|
|
}
|
|
|
|
internal int Read(Span<byte> buffer)
|
|
{
|
|
var temp = ArrayPool<byte>.Shared.Rent(buffer.Length);
|
|
|
|
try
|
|
{
|
|
var read = stream.Read(temp, 0, buffer.Length);
|
|
|
|
temp.AsSpan(0, read).CopyTo(buffer);
|
|
|
|
return read;
|
|
}
|
|
finally
|
|
{
|
|
ArrayPool<byte>.Shared.Return(temp);
|
|
}
|
|
}
|
|
|
|
internal void Write(ReadOnlySpan<byte> buffer)
|
|
{
|
|
var temp = ArrayPool<byte>.Shared.Rent(buffer.Length);
|
|
|
|
buffer.CopyTo(temp);
|
|
|
|
try
|
|
{
|
|
stream.Write(temp, 0, buffer.Length);
|
|
}
|
|
finally
|
|
{
|
|
ArrayPool<byte>.Shared.Return(temp);
|
|
}
|
|
}
|
|
}
|
|
}
|