c# - Zlib 在 C# 中按块压缩大文件
问题描述
我需要一些有关 zlib 压缩大文件的帮助。我的问题是我无法将文件逐块压缩到我一次性压缩的相同级别。当我按块进行压缩时,压缩的结果会稍大一些。但是,我需要将文件压缩为与一次性压缩文件的大小相同。我已经用 C# 编写了我的应用程序。我很感激如果你能请看一看并给我你的建议。
注意:我同时使用了 DotNetZip 和 SharpZipLib 库,发现这两个库的压缩结果也不同。
int len = 1 <<16;
int partSize = 5 <<16;
MemoryStream ms = new MemoryStream();
//ZlibStream streamCompressed = new ZlibStream(ms, CompressionMode.Compress, CompressionLevel.Default);
DeflaterOutputStream streamCompressed = new DeflaterOutputStream(ms, new Deflater( Deflater.DEFAULT_COMPRESSION, false ),len);
try
{
using var sourceFile = new BinaryReader(File.OpenRead(FilePath));
while ((bytesToRead = sourceFile.Read(chunk, 0, len)) > 0)
{
streamCompressed.Write(chunk, 0, bytesToRead);
compData = ms.ToArray();
ms.Position = 0;
ms.SetLength(0);
data = AddArrayToArray(data, compData);
if (data.Length >= partSize)
{
//UPLOAD DATA
}
}
ms = new MemoryStream();
streamCompressed.Flush();
compData = ms.ToArray();
data = AddArrayToArray(data, compData);
//UPLOAD THE LAST PART OF DATA
}
解决方案
推荐阅读
- sql - 带 PIVOT 的 CROSSTAB
- vbscript - 通过文件夹中的文件夹递归运行的 VBS 问题
- python-3.x - 将数据帧解析为 SQL 表的函数
- python - 如何在 Python 中读取文本并标记其中的每个单词
- kotlin - RecyclerView 中的应用程序崩溃 - 使用 Kotlin 的 DataBindingUtil.inflate()
- google-analytics - Google Analytics:事件已收集但未在 GA 中显示
- javascript - 无法执行递归多维数组
- azure - Azure App 推送失败:kudu.dll:未找到
- python-3.x - Numba 命名元组和数组签名
- javascript - 将 JSON 数据数组导入传播 JS