是否有可能获得封闭内存流的长度?
我正在尝试将GZipStream与MemoryStream一起使用。 我写了我需要的所有字节,然后关闭gzip流,所以之后我需要从内存流中获取压缩缓冲区而不分配额外的内存(方法ToArray返回必要的字节数组但是它创建新的字节数组然后将所有字节从缓冲区复制到新的数组)。 据我所知,我只能使用返回整个缓冲区的GetBuffer(),所以在这种情况下我还有另一个问题:缓冲区末尾的所有零字节都不属于压缩数据吗? 换句话说,我可以使用GetBuffer假设压缩缓冲区以最后一个非零字节结束吗?
此外,在很多情况下,我可以在关闭GZip流之前使用长度的MemoryStream,只需在GZip流关闭后向它添加10,对于所有情况都是如此吗?
GZipStream
的构造GZipStream
具有带有leaveOpen
参数的重载。
因此,当您需要在GZip关闭(并隐式地,刷新)之后访问MemoryStream时,将true
传递给它。
using (var ms = new MemoryStream()) { using (var gz = new GZipStream(ms, CompressionMode.Compress, leaveOpen: true)) { // ... write to gz } Console.WriteLine(ms.Length); // this is the final and accurate length }
这仍然会留下GetArray()vs getBuiffer()问题,但现在您可以使用具有准确长度的缓冲区。
上述就是C#学习教程:是否有可能获得封闭内存流的长度?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1044239.html