Expose SharpCompressStream to allow ringbuffer to be used on non-seekable streams
This commit is contained in:
parent
18eb140017
commit
a2a1b2e8fd
5 changed files with 46 additions and 3 deletions
|
|
@ -5,7 +5,7 @@ using System.Threading.Tasks;
|
|||
|
||||
namespace SharpCompress.IO;
|
||||
|
||||
internal partial class SharpCompressStream
|
||||
public partial class SharpCompressStream
|
||||
{
|
||||
public override Task<int> ReadAsync(
|
||||
byte[] buffer,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ using SharpCompress.Common;
|
|||
|
||||
namespace SharpCompress.IO;
|
||||
|
||||
internal partial class SharpCompressStream
|
||||
public partial class SharpCompressStream
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates a SharpCompressStream that acts as a passthrough wrapper.
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ using SharpCompress.Common;
|
|||
|
||||
namespace SharpCompress.IO;
|
||||
|
||||
internal partial class SharpCompressStream : Stream, IStreamStack
|
||||
public partial class SharpCompressStream : Stream, IStreamStack
|
||||
{
|
||||
public virtual Stream BaseStream() => stream;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using SharpCompress.Compressors.Xz;
|
||||
using SharpCompress.IO;
|
||||
using SharpCompress.Test.Mocks;
|
||||
using Xunit;
|
||||
|
||||
|
|
@ -34,4 +35,24 @@ public class XzStreamAsyncTests : XzTestsBase
|
|||
var uncompressed = await sr.ReadToEndAsync().ConfigureAwait(false);
|
||||
Assert.Equal(OriginalIndexed, uncompressed);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async ValueTask CanReadNonSeekableStreamAsync()
|
||||
{
|
||||
var nonSeekable = new ForwardOnlyStream(new MemoryStream(Compressed));
|
||||
var xz = new XZStream(SharpCompressStream.Create(nonSeekable));
|
||||
using var sr = new StreamReader(new AsyncOnlyStream(xz));
|
||||
var uncompressed = await sr.ReadToEndAsync().ConfigureAwait(false);
|
||||
Assert.Equal(Original, uncompressed);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async ValueTask CanReadNonSeekableEmptyStreamAsync()
|
||||
{
|
||||
var nonSeekable = new ForwardOnlyStream(new MemoryStream(CompressedEmpty));
|
||||
var xz = new XZStream(SharpCompressStream.Create(nonSeekable));
|
||||
using var sr = new StreamReader(new AsyncOnlyStream(xz));
|
||||
var uncompressed = await sr.ReadToEndAsync().ConfigureAwait(false);
|
||||
Assert.Equal(OriginalEmpty, uncompressed);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
using System.IO;
|
||||
using SharpCompress.Compressors.Xz;
|
||||
using SharpCompress.IO;
|
||||
using SharpCompress.Test.Mocks;
|
||||
using Xunit;
|
||||
|
||||
namespace SharpCompress.Test.Xz;
|
||||
|
|
@ -32,4 +34,24 @@ public class XzStreamTests : XzTestsBase
|
|||
var uncompressed = sr.ReadToEnd();
|
||||
Assert.Equal(OriginalIndexed, uncompressed);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CanReadNonSeekableStream()
|
||||
{
|
||||
var nonSeekable = new ForwardOnlyStream(new MemoryStream(Compressed));
|
||||
var xz = new XZStream(SharpCompressStream.Create(nonSeekable));
|
||||
using var sr = new StreamReader(xz);
|
||||
var uncompressed = sr.ReadToEnd();
|
||||
Assert.Equal(Original, uncompressed);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CanReadNonSeekableEmptyStream()
|
||||
{
|
||||
var nonSeekable = new ForwardOnlyStream(new MemoryStream(CompressedEmpty));
|
||||
var xz = new XZStream(SharpCompressStream.Create(nonSeekable));
|
||||
using var sr = new StreamReader(xz);
|
||||
var uncompressed = sr.ReadToEnd();
|
||||
Assert.Equal(OriginalEmpty, uncompressed);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue