问题描述
背景
我想在应用程序的未来 .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 (将#修改为@)