.NET потоки уже позволяют цепочку, о которой вы говорите.Например, если я хочу сжать данные и сохранить их в файле, я могу написать следующее:
using (var fs = File.OpenWrite(outputFilename))
{
using (var gz = new GZipStream(fs, CompressionMode.Compress))
{
// now, write to the GZip stream . . .
gz.Write(buffer, 0, buffer, length);
}
}
Вы можете сделать эту цепочку произвольно длинной.Например, я часто ставлю BufferedStream
перед GZipStream
, чтобы дать gzip большее окно сжатия.
Многопоточная упаковка не должна быть проблемой, если вы ограничиваете все свои многопоточные операциик внутренностям класса.Если вы хотите, чтобы несколько потоков могли выполнять одновременную запись в поток, вам придется создать какой-то механизм синхронизации, чтобы предотвратить чередование данных во входном буфере.Опять же, если вы ограничиваете эту синхронизацию внутренними классами, то проблем быть не должно.То же самое относится и к многопоточному распаковыванию и чтению.