C# 无Ionic.Zlib.DeflateStream.BaseStream

C# 无Ionic.Zlib.DeflateStream.BaseStream,c#,compression,dotnetzip,C#,Compression,Dotnetzip,我正在使用Ionic.Zlib.DeflateStream,我认为它是C代码中的aka DotNetZip,注意到它没有System.IO.Compression.DeflateStream那样的基流属性。有什么简单的方法可以访问这个吗?可能是一个不太熟悉这些概念的部分类或扩展,或者只是我忽略了的一些东西,或者是这个库的更新版本 更新:我在一个大型项目中有一个函数,该项目将一个Ionic.Zlib.DeflateStream作为参数。我知道底层流是一个MemoryStream,我想修改代码,在底

我正在使用Ionic.Zlib.DeflateStream,我认为它是C代码中的aka DotNetZip,注意到它没有System.IO.Compression.DeflateStream那样的基流属性。有什么简单的方法可以访问这个吗?可能是一个不太熟悉这些概念的部分类或扩展,或者只是我忽略了的一些东西,或者是这个库的更新版本


更新:我在一个大型项目中有一个函数,该项目将一个Ionic.Zlib.DeflateStream作为参数。我知道底层流是一个MemoryStream,我想修改代码,在底层流中寻找0的位置,写入几个字节,然后返回到previos位置。这就是我们所说的乱七八糟或肮脏的黑客行为,而不是重写大量代码。。。但这是我们目前正在寻找的解决方案,而不是需要更多重新测试的其他解决方案。MemoryStream这一部分中需要更新的几个字节没有被压缩,因此在deflatesttream之外对它们进行修改是可以的。

我仍然想知道未来项目的其他选项,或者这个答案是否会导致问题,但我想我确实找到了一个选项

当我像这样创建对象时:

MemoryStream ms = new MemoryStream();
DeflateStream ds = new DeflateStream(ms,...);
void Whatever(DeflateStream ds)
{
MyDeflateStream mds = (MyDeflateStream)ds;
MemoryStream ms = mds.RootStream;
}
如果改为创建一个类,如:

class MyDeflateStream : DeflateStream
{
public MemoryStream RootStream;
}
我可以将上述代码更改为:

MemoryStream ms = new MemoryStream();
MyDeflateStream ds = new MyDeflateStream (ms,...);
ds.RootStream = ms;
然后将我需要访问的函数设置为如下所示:

MemoryStream ms = new MemoryStream();
DeflateStream ds = new DeflateStream(ms,...);
void Whatever(DeflateStream ds)
{
MyDeflateStream mds = (MyDeflateStream)ds;
MemoryStream ms = mds.RootStream;
}

理想情况下,我只需要修改Whatever函数,因为有时我可能无法访问最初创建对象的代码,但在本例中我可以。因此,尽管我找到了一种可能的方法来解决这个问题,但我仍然希望得到答案。

请描述你正在努力实现的目标,而不是你认为应该实现的目标。