如何解决DeflateStream.Flush() 没有功能?
我试图使用 DeflateStream 压缩字节数组。拧干数据后,我正在寻找一种方法来关闭压缩(标记为完成)。起初,我尝试了 dispose() 然后是 Close(),但这些都使结果 MemoryStream 不可读。然后我想我可能需要Flush(),但是描述说“这个方法的当前实现没有功能”
但是好像没有Flush(),结果好像是空的。 “此方法的当前实现没有功能”是什么意思?
static void Main(string[] args)
{
byte[] result = Encoding.UTF8.GetBytes("わたしのこいはみなみのかぜにのってはしるわ");
var output = new MemoryStream();
var dstream = new DeflateStream(output,CompressionLevel.Optimal);
dstream.Write(result,result.Length);
var compressedSize1 = output.Position;
dstream.Flush();
var compressedSize2 = output.Position;
解决方法
“此方法的当前实现没有功能”是什么意思?
这意味着:它什么都不做,所以单独调用 Flush()
不会有帮助。您需要关闭 deflate 流以完成写入所需的内容,但不关闭底层流(块将在您写入流时写入,因为内部缓冲区已填满 - 但最终部分块无法写入,直到数据已准备好终止;并非所有压缩序列都支持能够在任意点刷新,然后在附加块中恢复压缩数据)
您可能想要的是:
using (var dstream = new DeflateStream(output,CompressionLevel.Optimal,true))
{
// Your deflate code
}
// Now check the memory stream
注意额外的 bool leaveOpen
参数用法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。