当前位置: 首页 > 编程语言 > C#

是否可以获取已关闭内存流的长度?分享

时间:2023-04-10 17:59:33 C#

是否可以获取一个关闭的内存流的长度?我正在尝试将GZipStream与MemoryStream一起使用。我写了我需要的所有字节然后关闭gzip流,所以之后我需要从内存流中获取压缩缓冲区而不分配额外的内存(方法ToArray返回必要的字节数组但它创建新的字节数组然后复制所有从缓冲区到新数组的字节)。据我所知,我只能使用GetBuffer()返回整个缓冲区,所以在这种情况下我有另一个问题:缓冲区末尾的所有零字节不都属于压缩数据吗?换句话说,假设压缩缓冲区以最后一个非零字节结尾,我可以使用GetBuffer吗?此外,在许多情况下,我可以在关闭GZip流之前使用MemoryStream的长度,只需在GZip流关闭后将其加10,这对所有情况都是如此吗?GZipStream的构造函数GZipStream有一个带有leaveOpen参数的重载。因此,当您需要在GZip关闭(并隐式地刷新)后访问MemoryStream时,将true传递给它。using(varms=newMemoryStream()){using(vargz=newGZipStream(ms,CompressionMode.Compress,leaveOpen:true)){//...写入gz}控制台。WriteLine(ms.Length);//thisisthefinalandaccuratelength}这仍然留下了GetArray()与getBuiffer()的问题,但现在你可以使用具有准确长度的缓冲区。以上是C#学习教程:Isitpossibletogetthelengthofaclosedmemorystream?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: