internal SynchronousReader(Stream stream, BufferedStreamReaderConfig config) { this.stream = stream; stopPrefetchAfterXBytes = config.StopPrefetchAfterXBytes; shadowBufferSize = config.ShadowBufferSize; totalBytesProcessed = 0; shadowBuffer = new ShadowBufferData(shadowBufferSize); }
internal PreFetchReader(Stream stream, BufferedStreamReaderConfig config) { stopPrefetchAfterXBytes = config.StopPrefetchAfterXBytes; shadowBufferSize = config.ShadowBufferSize; finished = false; tokenSource = new CancellationTokenSource(); totalBytesProcessed = 0; this.stream = stream; finishedBuffers = new AsyncProducerConsumerQueue <ShadowBufferData>(); idleBuffers = new AsyncProducerConsumerQueue <ShadowBufferData>(); for (int f = 0; f < config.TotalPreFetchBlocks; f++) { idleBuffers.Enqueue(new ShadowBufferData(shadowBufferSize)); } workerTask = Task.Run(WorkerThreadEntrypoint); }
public BufferedStreamReader(Stream stream, BufferedStreamReaderConfig config) { this.stream = stream; this.config = config; innerStreamStartPos = stream.CanSeek ? stream.Position : 0; currentShadowBufferSize = config.ShadowBufferSize; totBytesRead = 0; if (config.UsePreFetch) { reader = new PreFetchReader(stream, config); } else { reader = new SynchronousReader(stream, config); } shadowBuffer = null; FillShadowBuffer(); }