如何锁定流



我有两个线程:

线程1正在写入流。

线程2正在从该流中读取。

在线程2中,我如何锁定线程1,使其无法写入?这样我就可以从小溪里读了?

MemoryStream outputStream= new MemoryStream();

线程1:

stream = System.IO.File.OpenRead(fileToSend);
compressor.CompressionMethod = SevenZip.CompressionMethod.Lzma2;
compressor.CompressionLevel = SevenZip.CompressionLevel.Fast;
compressor.CompressStream(stream, outputStream);

我想读取线程2中的输出流。我已经尝试过使用lock(outputStream)outputStream.Lock(0,outputStream.Lengh),它们都不会阻止线程1向其写入

我正在使用sevenZipSharp

与其读&同时写入,我建议您将压缩流直接写入网络。

不幸的是,我认为sevenZipSharp库不可能直接写入NetworkStream。

作为替代方案,您可以使用DeflateStream。它可以直接写入NetworkStream。它已经开箱即用地包含在.NET Framework(System.dll).中

client.Connect(targetHost, port);
var networkStreamRaw = client.GetStream();
var networkStreamCompressed = new DeflateStream(networkStreamRaw, CompressionMode.Compress);
{
    networkStreamCompressed.Write(rawData, 0, rawData.Length);
}

我已经用1MB的数据测试了上面的代码,并成功地从接收器中获得了缩小的大小(压缩)。

1048576 bytes of raw-data sent.
1033 bytes of compressed-data received.

我的测试代码在这里可用http://pastebin.com/X0SYjYD7

EDIT:至于解压回来,你可以从new DeflateStream(streamReadingCompressedData, CompressionMode.Decompress)中得到。

相关内容

  • 没有找到相关文章

最新更新