GZipStream:为什么我们在压缩后转换为base 64?

2024-04-21

我只是在查看用于压缩字符串的代码示例。我发现使用 GZipStream 类就足够了。但我不明白为什么我们必须将其转换为 Base 64 字符串,如示例所示。

using System.IO.Compression;
using System.Text;
using System.IO;

public static string Compress(string text)
{
    byte[] buffer = Encoding.UTF8.GetBytes(text);
    MemoryStream ms = new MemoryStream();

    using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
    {
        zip.Write(buffer, 0, buffer.Length);
    }

    ms.Position = 0;
    MemoryStream outStream = new MemoryStream();

    byte[] compressed = new byte[ms.Length];
    ms.Read(compressed, 0, compressed.Length);

    byte[] gzBuffer = new byte[compressed.Length + 4];
    System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
    System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
    return Convert.ToBase64String(gzBuffer);
}

此外,我不明白我的 gzBuffer 已初始化为一个大小compressed.Length + 4。其实我也不明白为什么我们有最后几句话。有人可以分享一些光吗?


最有可能的是,基于 64 的字符串可以被视为纯文本,例如用于打印,包括在电子邮件或类似内容中。Edit:现在我看到了source http://www.csharphelp.com/2007/09/compress-and-decompress-strings-in-c/,他们说他们想将其插入到 XML 文件中,所以这就是为什么他们需要是纯文本。

The compressed.Length + 4由于下一行,需要尺寸 -块复制 http://msdn.microsoft.com/en-us/library/system.buffer.blockcopy.aspx。它开始将 4 个字节复制到 gzBuffer 中。 (第四个参数是目标缓冲区的字节偏移量)。第二个 BlockCopy 将压缩字符串的长度放入目标缓冲区的前四个字节中。我不确定为什么它需要这里的长度,但很可能有一个与之对应的相应解码例程。

Edit:该长度用于解压缩例程,以便程序知道解压缩的字节缓冲区应该有多长。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GZipStream:为什么我们在压缩后转换为base 64? 的相关文章

  • ToLookup 是否强制立即执行序列

    我正在调查可枚举 ToLookup将可枚举序列转换为字典类型数据结构的 API 更多详情可在这找到 https msdn microsoft com en us library system linq enumerable tolookup
  • 有没有办法找到哪些 .NET 类实现了某个接口?

    例如 如果我想查看我的 NET 选项用于实现 IList 或 IDictionary 有没有办法找到它 例如在 MSDN 文档中 我认为可以使用反射器 http www red gate com products reflector
  • 如何在C#中创建全局变量?

    我需要在我的 net 项目中使用全局变量 但是 我无法在两种方法之间处理它 my code string str protected void Page Load object sender EventArgs e if Page IsPo
  • 来自其他位置的 .NET 参考 dll

    我正在根据第三方程序中包含的一些 DLL 制作一个程序 我不被允许自己分发这些 DLL 必须安装第三方程序才能使我的程序运行 我怎样才能引用这些DLL 我通过程序设置的注册表项知道它们的确切位置 我尝试在 Project gt Refere
  • 有没有办法指定 .net 将使用哪个 NetworkInterface?

    我想使用 Wifi 和 LAN 连接在设备上运行一系列测试 我有两张网卡 一张是WiFi 一张是有线 该设备具有可通过两个网络接口访问的单个 IP 地址 有没有办法保证我的机器使用特定的网络接口 以便我可以通过有线连接运行所有测试 然后通过
  • 在方法中使用 IncludeMultiple

    我正在使用 Ladislav Mrnka 的扩展方法 public static IQueryable
  • 使用数据源时无法更改 datagridview 单元格颜色

    我有一个有趣的问题 我正在尝试使用数据表作为 datagridview 的数据源 我想对表格的某些单元格进行着色以指示各种事物 但由于某种原因 颜色不会显示 所以下面的代码显示了一个未着色的单元格 dataGridView1 DataSou
  • C#.net 中的 XML 数据库

    我正在为一些网站开发WPF客户端程序 它使用 XML 数据库 我是 XML 新手 请有人解释一下如何创建 附加 最重要 编辑 读取和加密 XML 文件 我知道这是一个大问题 但是 事情很紧急 必须尽快完成工作 在网上查了一下 没有得到正确的
  • TypeDescriptor 不返回继承接口的成员

    我的问题是 TypeDescriptor 不从继承的接口返回成员 这是它应该如何工作的吗 或者这是一个错误 TestFixture public class DescriptorTests Test public void Test cou
  • 使用在 Linux 上运行的 .NET Core 时连接到 MongoDB 失败

    我正在使用 ASP NET Core 2 0 构建一个网站 一个月前刚刚从 1 1 升级 MongoDB 也由 Mongo Atlas 在 AWS 上托管 这个 MongoDB 实例有 3 个副本集 需要 SSL 进行连接 并且已经设置可以
  • 在哪里可以找到 .net CLR 和 C# 的源代码?

    Microsoft net CLR 和 C 的源代码是否开放 如果是 在哪里可以下载 浏览 您可以借助以下链接下载 NET 的源代码网络海量下载器 http netmassdownloader codeplex com
  • 如何使用 C# 从 Kafka 获取主题列表

    我想从卡夫卡获取主题列表 我正在使用 kafka net 客户端 但无法在有关获取主题列表的文档中找到 您可以使用 Confluence Kafka 包中提供的 AdminClient 列出所有主题 using Confluent Kafk
  • 使用 C# 在 Powerpoint 2013 中创建具有多个系列的图表

    我使用的是 VS2013 Ultimate 带有 Office 2013 已安装 PowerPoint Excel 和 Word 我正在用 C 编码 我正在使用 C 创建 PowerPoint 演示文稿 到目前为止 我已经成功地完成了我想做
  • 本地计算机上的服务启动然后停止,某些服务如果没有被其他服务或程序使用则自动停止

    我创建了一个示例 Windows 服务并成功安装了我的服务 但是在要启动服务时 我收到以下错误 本地计算机上的此服务启动然后停止 如果其他服务或程序未使用某些服务 则会自动停止 我的配置文件代码
  • 从网络位置读取文件

    我在网络驱动器上共享的文件夹中有一堆文件 我正在尝试将这些文件访问到我的代码中 但它给出了一个错误 用户代码未处理 System IO DirectoryNotFoundException Fname txtwbs Text Directo
  • Request.Url.Query 和 Request.QueryString 有什么区别?

    我一直在追踪 URL 重写应用程序上的错误 该错误表现为查询字符串中某些变音符号的编码问题 基本上 问题是基本上 search aspx search he m nek 的请求被 search he c5 99m c3 a1nek 的查询字
  • 获取已安装的 Windows 应用商店应用程序列表

    有多种方法可以获取控制面板中 添加 删除程序 中已安装应用程序的列表 但我也想从 Windows 应用商店获取已安装应用程序的列表 到目前为止我还没有得到任何东西 有什么方法可以获取从 Windows 应用商店安装的应用程序列表吗 您可以在
  • WinDbg中出现“SOS版本与您正在调试的CLR版本不匹配”怎么办?

    我的某些应用程序出现问题 它是一个基于 wcf 的应用程序 在 Windows 2003 Server x86 的 IIS6 下运行 在事件日志中 我从 W3SVC WP 源 EventID 2262 收到这样的错误 ISAPI C WIN
  • 返回没有属性名称的 Json 结果

    很可能是一个相当微不足道的问题 但我就是找不到合适的答案 我想返回一个 JsonResult 但实际结果没有任何属性名称 这是我想要实现的一个小例子 xbox Xbox 360 Xbox cheats Xbox 360 games The
  • ClickOnce 应用程序和 Windows 8 认证

    是否有可能有一个单击一次 http en wikipedia org wiki ClickOnce WPF http en wikipedia org wiki Windows Presentation Foundation应用程序经过认证

随机推荐

  • 如何以编程方式改进破解替换密码?

    我已经编写 正在编写 一个程序来分析加密文本 并尝试使用频率分析来分析和破解它 加密文本采用每个字母替换其他字母的形式 即 a gt m b gt z c gt t 等 所有空格和非字母字符均被删除 大写字母变为小写 一个例子是 原始输入
  • decodeURIComponent 与 unescape,unescape 有什么问题?

    在回答另一个问题时 我意识到我的 Javascript DOM 知识已经有点过时了 因为我仍在使用escape unescape对 URL 组件的内容进行编码 而看起来我现在应该使用encodeURIComponent decodeURIC
  • 使用 python-pandas 索引数据帧时无法获得非唯一标签的正确切片绑定

    我有这样一个数据框df a b 10 2 3 1 0 0 0 4 about 50 000 rows 我希望选择df 5 a 但是当我打电话时df loc 5 a 我得到一个错误 KeyError Cannot get right slic
  • Java 不可变类规则

    下面的类是不可变的吗 final class MyClass private final int array public MyClass int array this array array 不 这不是因为数组的元素仍然可以更改 int
  • 如何用帖子标题 slug 重写 url?

    考虑一个网址 www example com paper ads details php req 43397 rnd 1308546000 我想将此网址更改为 www example com jobs in chanai php where
  • 更改 Eclipse 启动配置中的默认“要运行的程序”

    我时不时地使用以下命令从 Eclipse 中启动 JUnit 测试 运行方式 gt JUnit 插件测试 默认情况下 Eclipse 假设您正在运行需要工作台的东西 并在启动配置的 Main 部分中进行选择 LaunchConfig gt
  • 如何减少 Selenium 中 NoSuchElementException 的等待时间?

    在某些情况下 我知道元素不会显示 但它等待了约 30 秒 如何减少等待时间NoSuchElementException硒 示例代码 String name try name driver findElement By xpath XPath
  • Qt Ui 命名空间

    命名空间有什么意义Ui这是Qt自动生成的吗 这两个命名空间相同吗 在第一个中 其中包含 MainWindow 类的前向声明ui MainWindow h为什么它没有声明为class Ui MainWindow 编译器如何知道 MainWin
  • ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation: 错误: 表上的更新或删除违反了外键约束

    有一个非常相似的问题SO https stackoverflow com questions 47624334 error update or delete on table users violates foreign key const
  • 模板中带有参数的函数。姜戈

    在我的模板中 我显示用户关注的用户列表 我希望用户能够通过按钮删除他关注的用户之一 我有一个删除关系的函数remove relationship 这是我的 models py 中的函数 class UserProfile models Mo
  • 写入 Core Data 时创建新对象

    我有一个具有一些表单字段的应用程序 提交表单后 它将数据写入我的核心数据对象 但是 当再次提交表单时 它会覆盖现有数据而不是附加到它 这正是我想要发生的情况 guard let appDelegate UIApplication share
  • php 和 simpleXml - 如何更改节点内容

    我正在尝试使用 simpleXML 更改 XML 文件中节点的内容 我知道新节点内容的变量包含正确的内容 但由于某种原因 文件在保存时没有更改 我可能缺少一些基本的东西 因为我是 simpleXML 的新手 这是整个 php 脚本
  • Android 删除接近警报

    我正在开发处理接近警报的应用程序 我可以添加接近警报 但无法删除这些接近警报 我已经在手机和虚拟设备上尝试过我的代码 但无法删除它们 这是我的代码 将位置保存到数据库并添加接近警报的活动 saveButton setOnClickListe
  • 如何处理同时碰撞以使处理顺序无关紧要?

    假设有3个球同时碰撞 我发现解决冲突的顺序会对最终结果产生影响 这当然没有意义 为了解释和简单起见 考虑 1D 中的 3 个球 质量相同 弹性碰撞 顶部的数字是速度 箭头是方向 假设它们当前都互相接触 即发生碰撞 gt 2 gt 1 lt
  • Pydev 中的 Django 会产生多个进程?

    我在 Eclipse 中的 PyDev 中设置了我的项目 每当我调试我的项目时 一切都很顺利 但是一旦我尝试重新启动 Django 服务器 它就会生成一个额外的 runserver 进程 阻塞我用于服务器的端口 8000 有没有解决方法可以
  • Nginx 位置“不等于”正则表达式

    我该如何设置locationNginx 中的条件是否响应任何不等于列出的位置 I tried location dir1 file2 php rewrite http example com 1 permanent 但它不会触发重定向 它只
  • Rails:如何为 ruby​​ 模块编写测试?

    我想知道如何为混合到几个类中的模块编写单元测试 但不太知道如何去做 我是否通过在包含它们的类的测试文件之一中编写测试来测试实例方法 似乎不正确 或者您可以以某种方式将所包含方法的测试保留在特定于模块的单独文件中吗 同样的问题也适用于类方法
  • VBO - 没有指数化的指数化

    我正在尝试将 VBO 与元素数组缓冲区一起用于我的三角形 如下所示 glBindBuffer GL ARRAY BUFFER g Buffer 0 glVertexPointer 3 GL FLOAT 0 BUFFER OFFSET 0 g
  • 如何使用 python-decorator 包来装饰类方法?

    我有一个装饰器 我想用它来装饰类方法 在下面的示例中 mydec 装饰器本身可以正常工作 但是在使用 help 或 pydoc 时它不会保留函数签名 为了解决这个问题 我研究了使用 decorator python decorator 包
  • GZipStream:为什么我们在压缩后转换为base 64?

    我只是在查看用于压缩字符串的代码示例 我发现使用 GZipStream 类就足够了 但我不明白为什么我们必须将其转换为 Base 64 字符串 如示例所示 using System IO Compression using System T