我有两个线程:
线程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)
中得到。