如何解决有什么方法可以在 .Net Framework 中复制 .Net Core DeflateStream.Flush() 行为?
背景
我想在应用程序的未来 .Net Core 端口中使用 StreamJsonRpc 作为 WCF 的替代品。在将代码移植到 .Net Core 之前,我想更新现有代码(即 .Net Framework 4.8)以使用 StreamJsonRpc。
因为StreamJsonRpc写入的数据相对于二进制源数据比较大,压缩性极强,所以想用DeflateStream
来压缩。
这导致了问题:压缩适用于 .Net Core,但不适用于 .Net Framework。
为什么它不起作用
考虑以下代码:
var output = new MemoryStream();
var deflater = new DeflateStream(output,CompressionMode.Compress,leaveOpen:true);
var data = Encoding.UTF8.GetBytes("This is the data to be compressed");
deflater.Write(data,data.Length);
deflater.Flush();
Console.WriteLine(output.Length); // 0 for .Net 4.8,>0 for .Net Core 3.1+
对于 .Net Core,这会输出一个大于零的数字。对于 .Net Framework,此输出为零。
我对 StreamJsonRpc
进行了检测,我可以看到它在写入数据块后调用 Stream.Flush()
,所以我很确定这就是问题所在。
DeflateStream.Flush()
的 .Net Core 实现实际上会刷新,但 .Net Framework 实现什么也不做。
我的问题
.Net Framework 4.8 中有没有办法刷新 DeflateStream
?如果有,我可以为实现 DeflateStream
的 Stream.Flush()
编写一个包装类,以便它实际刷新。
其他注意事项
A bug was raised for this 于 2015 年 10 月,it was fixed for .Net Core 于 2015 年 12 月。
另外,the documentation for DeflateStream.Flush()
是不正确的。
对于 .Net Framework 和 .Net Core,标题表示:
但是在备注下它说:
如果压缩模式设置为压缩,则刷新内部缓冲区。
显然这两件事都不能成立,.Net Core 和 .Net Framework 的文档应该不同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。