ZLib解压

2023-12-13

我正在尝试使用 zlib .net 库压缩数据。无论未压缩字符串的内容如何,​​我似乎只在 raw[] 中获得两个字节的数据。

{
    string uncompressed = "1234567890";
    byte[] data = UTF8Encoding.Default.GetBytes(uncompressed);

    MemoryStream input = new MemoryStream(data);
    MemoryStream output = new MemoryStream();
    Stream outZStream = new ZOutputStream(output,zlibConst.Z_DEFAULT_COMPRESSION);

    CopyStream(input, outZStream);

    output.Seek(0, SeekOrigin.Begin);
    byte[] raw = output.ToArray();
    string compressed = Convert.ToBase64String(raw);
}

public void CopyStream(System.IO.Stream input, System.IO.Stream output)
{
    byte[] buffer = new byte[2000];
    int len;
    while ((len = input.Read(buffer, 0, 2000)) > 0)
    {
       output.Write(buffer, 0, len);
    }
    output.Flush();
}

这里的问题是,ZOutputStream 实际上在 finish() 方法(由 Close 调用)中将一些信息写入流中。 Close 方法还会关闭基本流,因此在这种情况下没有多大用处。

将代码更改为以下内容应该可以工作:

{
    string uncompressed = "1234567890";
    byte[] data = UTF8Encoding.Default.GetBytes(uncompressed);

    MemoryStream input = new MemoryStream(data);
    MemoryStream output = new MemoryStream();
    ZOutputStream outZStream = new ZOutputStream(output,zlibConst.Z_DEFAULT_COMPRESSION);

    CopyStream(input, outZStream);

    outZStream.finish();

    output.Seek(0, SeekOrigin.Begin);
    byte[] raw = output.ToArray();
    string compressed = Convert.ToBase64String(raw);
}

public void CopyStream(System.IO.Stream input, System.IO.Stream output)
{
    byte[] buffer = new byte[2000];
    int len;
    while ((len = input.Read(buffer, 0, 2000)) > 0)
    {
       output.Write(buffer, 0, len);
    }
    output.Flush();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ZLib解压 的相关文章

随机推荐

  • Android 更新ListView

    我看过Android 如何更新当前显示的ListView项目 and http commonsware com Android excerpt pdf和Android文档 但我还是不明白 我的问题 使用处理程序 我尝试更新 Stock 数据
  • Matlab中预计算函数的缓存结果

    我有两个数组 x and y x是函数的输入 y是函数值 例如 x 1 2 3 4 5 6 7 8 9 10 y 3 6 2 4 1 6 7 0 1 8 两者的长度相同 假设我有另一个数组z含有 2 3 8 9 10 3 长度不等于x an
  • 找出所有可能的欧拉循环

    我已经实现了一种算法来查找无向图中给定起始顶点的欧拉循环 使用 DFS 并删除访问的边 但它总是只返回一条路径 如何修改算法以搜索顶点的所有可能的欧拉循环 这是相关代码 typedef int Graph 200 200 adjacency
  • 如何使用socket.io从节点连接到telnet服务器

    我可能没有输入正确的搜索词 但我似乎找不到允许我的节点应用程序启动与另一个 telnet 服务器 非节点 的 socket io 客户端连接的好例子 下面是我的节点应用程序尝试连接到 telnet 服务器 var ioc require s
  • 除了 COM 之外,还有更好的方法来远程控制 Excel 吗?

    我正在开发一个回归测试工具 该工具将验证大量的 Excel 电子表格 目前 我使用最新版本的 pywin32 产品通过 Python 脚本通过 COM 控制它们 不幸的是 COM 似乎有许多恼人的缺点 例如 最轻微的干扰似乎就能中断与 CO
  • 创建用于导航的 ViewModel

    我有一个带有多个视图的 MVC 4 应用程序 IE 产品 食谱 分销商和商店 每个视图都基于一个模型 让我们保持简单 假设我的所有控制器都传递一个类似的视图模型 看起来像我的 Product 操作 public ActionResult I
  • 从代码隐藏中将页面异步模式设置为 true

    是否可以在我的代码隐藏文件中设置页面指令的异步模式 我没有办法直接修改属性 并努力寻找一种在我的代码隐藏中实现此功能的方法 我尝试在我的 Page Load 方法中添加Page AsyncMode true 但它返回以下错误 由于其保护级别
  • 如何使用 # 作为 CoffeeScript hereregex 的一部分?

    我正在尝试匹配 jQuery Mobile URL 的哈希片段 如下所示 matches window location hash match we re interested in the hash fragment the path t
  • Python:Flask 的模拟补丁错误

    在编写 Python 方面 我完全是个新手 更不用说测试它了 这是我的 Flask 端点 blueprint route mailing finish
  • 如何更换|| (两个管道)来自带有 | 的字符串(一)管道

    我收到此标签内一些 json 格式图像的响应 xmlImageIds 57948916 57948917 57948918 57948919 57948920 57948921 57948 922 57948923 57948924 579
  • 复制构造函数需要调用依赖于对象的方法,但构造函数不能是虚拟的

    我有一个带有两个继承类的抽象基类 在这两个类中 我定义了一个由构造函数使用的虚拟方法 现在我需要创建一个复制构造函数 但我不能将复制构造函数声明为虚拟 但我希望其中的方法调用依赖于作为参数提供的对象的类型 我该如何解决这个问题 现在我使用基
  • 当有受保护的工作表时如何保持宏运行?

    我用密码保护了工作表 4 因为工作表 4 中的某些单元格不允许用户输入 密码是 1234 但是 我想运行我的宏 如果出现错误 单元格将自动突出显示 我的宏未运行并出错 因为我要突出显示的单元格位于受保护的工作表中 当我单击验证按钮时 如何使
  • 你能指定 std::getline 中什么不是分隔符吗?

    我希望它将任何非字母字符视为分隔符 我怎样才能做到这一点 你不能 默认分隔符是 n while std getline std cin str n is implicit 对于其他分隔符 请传递它们 while std getline st
  • mongoDB 聚合:根据数组名称求和

    我有一场比赛的以下数据 date 20140101 duration 23232 win player Player1 score 2344324 player Player4 score 23132 loss player Player2
  • 如何处理大多数十进制小数无法准确表示为二进制的事实?

    所以 我们知道像 0 1 这样的分数无法用二进制精确表示 这会导致精确问题 例如这里提到的 在 C 中格式化双精度数以进行输出 我们知道我们有十进制类型来表示数字 但问题是 很多数学方法不支持十进制类型 所以我们将它们转换为双精度 这再次破
  • 为什么 R 中的 apply() 方法比 for 循环慢?

    作为最佳实践 我试图确定创建一个函数是否更好apply 它穿过一个矩阵 或者是否最好简单地通过该函数循环一个矩阵 我尝试了两种方法并惊讶地发现apply 速度较慢 任务是获取一个向量并将其评估为正或负 然后返回一个向量 如果为正则返回 1
  • 使用 React 将提交的表单值保存在 JSON 文件中

    我正在尝试创建一个 React 表单 它将在提交时使用表单中的值更新 JSON 文件 最终结果是 每次提交表单时 这都会在 JSON 文件中创建一个数据数组 然后可以使用该数组填充应用程序中其他地方提交的结果的 列表 表单本身工作正常 但每
  • 如何在android中安排一些代码执行或者:android中的守护线程到底是什么?

    我目前正在开发一个适用于 Android 操作系统的应用程序 它需要不时从远程服务器获取数据 由于即使实际的前端应用程序未运行 也应该执行此 更新 因此我实现了一个在系统启动时启动的远程服务 现在我需要安排一个计时器来开始更新 Timer
  • django 在 modelform 中使用模型选择

    我想知道应该如何在模型表单中使用模型选择选项 示例 型号 class NPCGuild models Model CATEGORIES COM Combat CRA Crafting WAR Warfare faction models F
  • ZLib解压

    我正在尝试使用 zlib net 库压缩数据 无论未压缩字符串的内容如何 我似乎只在 raw 中获得两个字节的数据 string uncompressed 1234567890 byte data UTF8Encoding Default