diff --git a/src/SharpCompress/IO/SharpCompressStream.Create.cs b/src/SharpCompress/IO/SharpCompressStream.Create.cs index 5f30a585..7cf40095 100644 --- a/src/SharpCompress/IO/SharpCompressStream.Create.cs +++ b/src/SharpCompress/IO/SharpCompressStream.Create.cs @@ -12,14 +12,14 @@ internal partial class SharpCompressStream /// The underlying stream will not be disposed when this stream is disposed. /// public static SharpCompressStream CreateNonDisposing(Stream stream) => - new(stream, leaveStreamOpen: true, passthrough: true); + new(stream, leaveStreamOpen: true, passthrough: true, bufferSize: null); public static SharpCompressStream Create( Stream stream, - int? rewindableBufferSize = null + int? bufferSize = null ) { - int bufferSize = rewindableBufferSize ?? Constants.RewindableBufferSize; + int rewindableBufferSize = bufferSize ?? Constants.RewindableBufferSize; // If it's a passthrough SharpCompressStream, unwrap it and create proper seekable wrapper if (stream is SharpCompressStream sharpCompressStream) @@ -37,7 +37,7 @@ internal partial class SharpCompressStream }; } // Non-seekable underlying stream - wrap with rolling buffer - return new SharpCompressStream(underlying, bufferSize) { LeaveStreamOpen = true }; + return new SharpCompressStream(underlying, true, false, rewindableBufferSize); } // Not passthrough - return as-is return sharpCompressStream; @@ -60,6 +60,6 @@ internal partial class SharpCompressStream // For non-seekable streams, create a SharpCompressStream with rolling buffer // to allow limited backward seeking (required by decompressors that over-read) - return new SharpCompressStream(stream, bufferSize); + return new SharpCompressStream(stream, false,false, bufferSize); } } diff --git a/src/SharpCompress/IO/SharpCompressStream.cs b/src/SharpCompress/IO/SharpCompressStream.cs index adeca170..f0aec887 100644 --- a/src/SharpCompress/IO/SharpCompressStream.cs +++ b/src/SharpCompress/IO/SharpCompressStream.cs @@ -51,29 +51,21 @@ internal partial class SharpCompressStream : Stream, IStreamStack _logicalPosition = 0; } - /// - /// Creates a SharpCompressStream with a rolling buffer that enables limited backward seeking. - /// - /// The underlying stream to wrap. - /// Size of the rolling buffer in bytes. - public SharpCompressStream(Stream stream, int rollingBufferSize) - : this(stream) - { - if (rollingBufferSize > 0) - { - _ringBuffer = new RingBuffer(rollingBufferSize); - } - } /// /// Private constructor for passthrough mode. /// - private SharpCompressStream(Stream stream, bool leaveStreamOpen, bool passthrough) + private SharpCompressStream(Stream stream, bool leaveStreamOpen, bool passthrough, int? bufferSize) { this.stream = stream; LeaveStreamOpen = leaveStreamOpen; _isPassthrough = passthrough; _logicalPosition = 0; + + if (bufferSize.HasValue && bufferSize.Value > 0) + { + _ringBuffer = new RingBuffer(bufferSize.Value); + } } /// diff --git a/src/SharpCompress/Readers/ReaderFactory.Async.cs b/src/SharpCompress/Readers/ReaderFactory.Async.cs index a1302fc0..c0b3f623 100644 --- a/src/SharpCompress/Readers/ReaderFactory.Async.cs +++ b/src/SharpCompress/Readers/ReaderFactory.Async.cs @@ -56,7 +56,7 @@ public static partial class ReaderFactory var sharpCompressStream = SharpCompressStream.Create( stream, - options.RewindableBufferSize + bufferSize:options.RewindableBufferSize ); sharpCompressStream.StartRecording(); diff --git a/src/SharpCompress/Readers/ReaderFactory.cs b/src/SharpCompress/Readers/ReaderFactory.cs index 7aad0c00..6cafb063 100644 --- a/src/SharpCompress/Readers/ReaderFactory.cs +++ b/src/SharpCompress/Readers/ReaderFactory.cs @@ -36,7 +36,7 @@ public static partial class ReaderFactory var sharpCompressStream = SharpCompressStream.Create( stream, - options.RewindableBufferSize + bufferSize:options.RewindableBufferSize ); sharpCompressStream.StartRecording(); diff --git a/src/SharpCompress/Readers/Tar/TarReader.cs b/src/SharpCompress/Readers/Tar/TarReader.cs index 562ec362..8a79e49f 100644 --- a/src/SharpCompress/Readers/Tar/TarReader.cs +++ b/src/SharpCompress/Readers/Tar/TarReader.cs @@ -59,7 +59,7 @@ public partial class TarReader : AbstractReader options = options ?? new ReaderOptions(); var sharpCompressStream = SharpCompressStream.Create( stream, - options.RewindableBufferSize + bufferSize:options.RewindableBufferSize ); long pos = sharpCompressStream.Position; if (GZipArchive.IsGZipFile(sharpCompressStream))