public void Stream() { var array = new byte[] { 1, 2, 3 }; using (var stream = new MemoryStream(array)) { Assert.False(FileStreamReadLightUp.IsFileStream(stream)); using (var provider = new StreamMemoryBlockProvider(stream, 0, array.Length, isFileStream: false, leaveOpen: true)) { using (var block = provider.GetMemoryBlock()) { Assert.IsType<NativeHeapMemoryBlock>(block); Assert.Equal(3, block.Size); AssertEx.Equal(array, block.GetContent()); } Assert.Equal(3, stream.Position); using (var block = provider.GetMemoryBlock(1, 2)) { Assert.IsType<NativeHeapMemoryBlock>(block); Assert.Equal(2, block.Size); AssertEx.Equal(new byte[] { 2, 3 }, block.GetContent()); } Assert.Equal(3, stream.Position); } using (var provider = new StreamMemoryBlockProvider(stream, 0, array.Length, isFileStream: false, leaveOpen: false)) { using (var block = provider.GetMemoryBlock()) { Assert.IsType<NativeHeapMemoryBlock>(block); Assert.Equal(3, block.Size); AssertEx.Equal(array, block.GetContent()); } Assert.Equal(3, stream.Position); } Assert.Throws<ObjectDisposedException>(() => stream.Position); } }
public void FileStream() { string filePath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); try { var array = new byte[StreamMemoryBlockProvider.MemoryMapThreshold + 1]; for (int i = 0; i < array.Length; i++) { array[i] = 0x12; } File.WriteAllBytes(filePath, array); foreach (bool useAsync in new[] { true, false }) { using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, useAsync)) { Assert.True(FileStreamReadLightUp.IsFileStream(stream)); using (var provider = new StreamMemoryBlockProvider(stream, imageStart: 0, imageSize: array.Length, isFileStream: true, leaveOpen: false)) { // large: using (var block = provider.GetMemoryBlock()) { Assert.IsType<MemoryMappedFileBlock>(block); Assert.Equal(array.Length, block.Size); AssertEx.Equal(array, block.GetContent()); } // we didn't use the stream for reading Assert.Equal(0, stream.Position); // small: using (var block = provider.GetMemoryBlock(1, 2)) { Assert.IsType<NativeHeapMemoryBlock>(block); Assert.Equal(2, block.Size); AssertEx.Equal(new byte[] { 0x12, 0x12 }, block.GetContent()); } Assert.Equal(3, stream.Position); } Assert.Throws<ObjectDisposedException>(() => stream.Position); } } } finally { File.Delete(filePath); } }