- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要压缩一个字符串以减小 Web 服务响应的大小。我在 SharpZipLib 示例中看到了单元测试,但不是我所需要的示例。
在下面的代码中,ZipOutputStream 的构造函数返回异常:“No open entry”
byte[] buffer = Encoding.UTF8.GetBytes(SomeLargeString);
Debug.WriteLine(string.Format("Original byes of string: {0}", buffer.Length));
MemoryStream ms = new MemoryStream();
using (ZipOutputStream zipStream = new ZipOutputStream(ms))
{
zipStream.Write(buffer, 0, buffer.Length);
Debug.WriteLine(string.Format("Compressed byes: {0}", ms.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);
string compressedString = Convert.ToBase64String (gzBuffer);
我哪里偏离了轨道?我是否使它变得比它应该的更复杂?
最佳答案
对于来自 Silverlight 的 Web 服务通信压缩数据,我使用此代码段:
private byte[] zipText(string text)
{
if (text == null)
return null;
using(Stream memOutput = new MemoryStream())
{
using (GZipOutputStream zipOut = new GZipOutputStream(memOutput))
{
using (StreamWriter writer = new StreamWriter(zipOut))
{
writer.Write(text);
writer.Flush();
zipOut.Finish();
byte[] bytes = new byte[memOutput.Length];
memOutput.Seek(0, SeekOrigin.Begin);
memOutput.Read(bytes, 0, bytes.Length);
return bytes;
}
}
}
}
private string unzipText(byte[] bytes)
{
if (bytes == null)
return null;
using(Stream memInput = new MemoryStream(bytes))
using(GZipInputStream zipInput = new GZipInputStream(memInput))
using(StreamReader reader = new StreamReader(zipInput))
{
string text = reader.ReadToEnd();
return text;
}
}
我的案例是json数据的压缩。根据我的观察,在某些情况下,大约 95Kb 的文本数据被压缩到 1.5Kb。所以连数据都会序列化成base 64,反正都很好节省流量。
发布了我的答案,可能会节省一些时间。
关于c# - SharpZipLib 压缩字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9830428/
我正在使用 CSharpZipLib库自动压缩一些文件。问题是生成的 zip 文件不适用于 Winzip(8.1 版)或 XP 的压缩文件夹。它确实适用于 7zip。 Winzip 给出一个错误,提示
有没有办法找出提取时未提取存档的总大小。 最佳答案 试试这个: ZipFile zFile = new ZipFile(myZipFileName); long uSize = 0; foreach
我正在使用 SharpZipLib压缩一个带有子目录的文件夹,这工作正常。我想做的是剥离第一个子文件的父目录,这样不相关的整个结构就不会被执行... 例子: c:\a\b\c\d\e\f\g\h\fi
每当我尝试获取文件时,输入流的长度 (s.Length) 始终为零,我做错了什么? ZipEntry 有效且具有正确的文件大小等。 这是我使用的代码: public static byte[] Get
我使用了许多现有代码,并尝试以多种方式压缩文件夹,但我仍然遇到时间和文件夹大小(仍然大约相同大小)的问题。此代码来自库的源代码,但仍然没有给出想要的结果 static void Main(string
我需要压缩一个字符串以减小 Web 服务响应的大小。我在 SharpZipLib 示例中看到了单元测试,但不是我所需要的示例。 在下面的代码中,ZipOutputStream 的构造函数返回异常:“N
我使用 DotNetZip 创建一个带有内存字符串的 zip 存档,并使用以下代码将其作为附件下载。 byte[] formXml = UTF8Encoding.Default.GetBytes("T
我正在尝试使用以下代码将文件添加到现有存档中。运行时没有显示错误或异常,但也没有文件添加到存档中。有什么想法吗? using (FileStream fileStream = File
我正在尝试使用 SharpZipLib 从 zip 存档中提取指定的文件。我见过的所有示例都希望您解压缩整个 zip,然后执行以下操作: FileStream fileStreamIn
我有一个场景,我想使用 SharpZipLib 压缩电子邮件附件。然后最终用户将打开附件并解压缩附件。 最初使用 SharpZipLib 压缩的文件是否可以通过其他程序为我的最终用户轻松解压缩? 最佳
我想使用 SharpZipLib 打包压缩一些文件夹。示例结构 directory1: directory2: file1 file2 directory3:
我对压缩算法不是很精通。 我有一段 C# 代码使用上述库来压缩和解压缩一大块数据。它使用压缩级别 3,但除此之外,它是最基本的实现。 我现在想使用 C++ 对这些数据执行相同的操作。既然是 zip 格
我有一个 453MB 的 XML 文件,我正在尝试使用 SharpZipLib 将其压缩为 ZIP 文件. 下面是我用来创建 zip 的代码,但它导致了 OutOfMemoryException。此代
如何使用没有压缩的 SharpZipLib 将文件添加到 Zip 存档? Google 上的示例似乎少得可怜。 最佳答案 您可以使用 ZipOutputStream 类的 SetLevel 方法将压缩
我的代码中有以下方法: private bool GenerateZipFile(List filesToArchive, DateTime archiveDate) { try {
我有一个发送文件和文件夹的文件传输应用程序。 (服务器 - 客户端) 我正在尝试通过 TCP(套接字)发送数据,我已经为传输数据的方式制定了一些规则,所以如果它发送一个包含很多文件的大文件夹,它应该先
我使用 SharpZipLib 压缩文件,但用户收到此错误: 1 is not a supported code page 我找到了 here该问题在区域设置中,解决方案在 "replace the
我使用以下代码创建一个 zip 文件: var files = Directory.GetFiles(targetPath); var zip = ZipFile.Create(targetPath
我们目前使用 ICsharpCode.SharpZipLib 库的 GZipOutputStream 类进行压缩。我们从一个线程中完成。 我想将我的输入数据流分成块并并行压缩它们。 虽然我担心这个库可
大家好, 我正在尝试使用 ICSharpCode.SharpZipLib 库生成 Zip 文件,但它抛出了一个非常奇怪的错误。 代码: public static void ZipFiles(stri
我是一名优秀的程序员,十分优秀!