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))