diff --git a/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/DoubleBufferedStreamReader.cs b/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/DoubleBufferedStreamReader.cs index d8a43428d..eb562424d 100644 --- a/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/DoubleBufferedStreamReader.cs +++ b/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/DoubleBufferedStreamReader.cs @@ -15,7 +15,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components internal class DoubleBufferedStreamReader : IDisposable { /// - /// The length, in bytes, of the chunk + /// The length, in bytes, of the buffering chunk /// public const int ChunkLength = 4096; @@ -38,7 +38,6 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components { this.stream = stream; this.Length = stream.Length; - this.buffer = memoryManager.AllocateCleanManagedByteBuffer(ChunkLength); this.chunk = this.buffer.Array; } @@ -62,7 +61,6 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components { // Reset everything. It's easier than tracking. this.position = value; - this.stream.Seek(this.position, SeekOrigin.Begin); this.bytesRead = ChunkLength; } } @@ -96,8 +94,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components /// The number of bytes to skip public void Skip(int count) { - this.position += count; - this.bytesRead += count; + this.Position += count; } /// @@ -144,9 +141,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components this.stream.Seek(this.position, SeekOrigin.Begin); n = this.stream.Read(buffer, offset, count); - // Ensure next read fills the chunk - this.bytesRead = ChunkLength; - this.position += count; + this.Position += count; } return Math.Max(n, 0); diff --git a/tests/ImageSharp.Tests/Formats/Jpg/DoubleBufferedStreamReaderTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/DoubleBufferedStreamReaderTests.cs index c1049f025..61017ce9b 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/DoubleBufferedStreamReaderTests.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/DoubleBufferedStreamReaderTests.cs @@ -4,19 +4,22 @@ using System; using System.IO; using SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components; +using SixLabors.ImageSharp.Memory; using Xunit; namespace SixLabors.ImageSharp.Tests.Formats.Jpg { public class DoubleBufferedStreamReaderTests { + private MemoryManager manager = Configuration.Default.MemoryManager; + [Fact] public void DoubleBufferedStreamReaderCanReadSingleByteFromOrigin() { using (MemoryStream stream = CreateTestStream()) { byte[] expected = stream.ToArray(); - var reader = new DoubleBufferedStreamReader(stream); + var reader = new DoubleBufferedStreamReader(this.manager, stream); Assert.Equal(expected[0], reader.ReadByte()); @@ -32,7 +35,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg using (MemoryStream stream = CreateTestStream()) { byte[] expected = stream.ToArray(); - var reader = new DoubleBufferedStreamReader(stream); + var reader = new DoubleBufferedStreamReader(this.manager, stream); for (int i = 0; i < expected.Length; i++) { @@ -64,7 +67,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg { byte[] buffer = new byte[2]; byte[] expected = stream.ToArray(); - var reader = new DoubleBufferedStreamReader(stream); + var reader = new DoubleBufferedStreamReader(this.manager, stream); Assert.Equal(2, reader.Read(buffer, 0, 2)); Assert.Equal(expected[0], buffer[0]); @@ -83,7 +86,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg { byte[] buffer = new byte[2]; byte[] expected = stream.ToArray(); - var reader = new DoubleBufferedStreamReader(stream); + var reader = new DoubleBufferedStreamReader(this.manager, stream); for (int i = 0, o = 0; i < expected.Length / 2; i++, o += 2) {