Remove stream-like functionality from ContentReader/Writer

Use streams instead
This commit is contained in:
2023-09-15 21:46:17 +02:00
parent f8d759f044
commit d8c9929a97
31 changed files with 313 additions and 310 deletions

View File

@@ -5,44 +5,14 @@ namespace FileTime.Providers.Local;
public class LocalContentReader : IContentReader
{
private readonly FileStream _readerStream;
private readonly BinaryReader _binaryReader;
private bool _disposed;
public int PreferredBufferSize => 1024 * 1024;
public long? Position { get; private set; }
public LocalContentReader(FileStream readerStream)
{
_readerStream = readerStream;
_binaryReader = new BinaryReader(_readerStream);
}
public Task<byte[]> ReadBytesAsync(int bufferSize, int? offset = null)
{
var max = bufferSize > 0 && bufferSize < PreferredBufferSize ? bufferSize : PreferredBufferSize;
if (offset != null)
{
if (Position == null) Position = 0;
var buffer = new byte[max];
var bytesRead = _binaryReader.Read(buffer, offset.Value, max);
Position += bytesRead;
if (buffer.Length != bytesRead)
{
Array.Resize(ref buffer, bytesRead);
}
return Task.FromResult(buffer);
}
else
{
return Task.FromResult(_binaryReader.ReadBytes(max));
}
}
public void SetPosition(long position) => Position = position;
public Stream AsStream() => _binaryReader.BaseStream;
public Stream GetStream() => _readerStream;
~LocalContentReader()
{
@@ -62,7 +32,6 @@ public class LocalContentReader : IContentReader
if (disposing)
{
_readerStream.Dispose();
_binaryReader.Dispose();
}
}
_disposed = true;

View File

@@ -5,36 +5,14 @@ namespace FileTime.Providers.Local;
public class LocalContentWriter : IContentWriter
{
private readonly FileStream _writerStream;
private readonly BinaryWriter _binaryWriter;
private bool _disposed;
public int PreferredBufferSize => 1024 * 1024;
public LocalContentWriter(FileStream writerStream)
{
_writerStream = writerStream;
_binaryWriter = new BinaryWriter(_writerStream);
}
public Task WriteBytesAsync(byte[] data, int? index = null, CancellationToken cancellationToken = default)
{
if (index != null)
{
_binaryWriter.Write(data, index.Value, data.Length);
}
else
{
_binaryWriter.Write(data);
}
return Task.CompletedTask;
}
public Task FlushAsync(CancellationToken cancellationToken = default)
{
_binaryWriter.Flush();
return Task.CompletedTask;
}
public Stream AsStream() => _binaryWriter.BaseStream;
public Stream GetStream() => _writerStream;
~LocalContentWriter()
{
@@ -54,7 +32,6 @@ public class LocalContentWriter : IContentWriter
if (disposing)
{
_writerStream.Dispose();
_binaryWriter.Dispose();
}
}
_disposed = true;