![](/img/trans.png)
[英]How to change substring in more than 1,000,000,000 records?
[英]How to extract more than 900,000 bytes using SharpZipLib BZip2
当使用ICSharpCode.SharpZipLib
解压缩 BZip2 文件时,我遇到了一个问题,即只提取了前 900,000 个未压缩字节。 我已经尝试了BZip2InputStream
和BZip2.Decompress
static 方法无济于事。 压缩数据是 8,518 字节,我已经确认这是我作为compressedDataByteArray
传入的字节数组的长度,解压后的数据应该是 1,134,592 字节 - 所以我可以看到它被截断了。
我尝试使用 BZip2InputStream - 观察控制台写出“900000”而不是“1134592”:
static void Main(string[] args)
{
var compressedDataByteArray = File.ReadAllBytes("data.bz2");
using (var mstream = new MemoryStream(compressedDataByteArray))
using (var zstream = new BZip2InputStream(mstream))
using (var reader = new StreamReader(zstream))
{
string uncompressedData = reader.ReadToEnd();
Console.WriteLine(uncompressedData.Length);
}
Console.ReadKey();
}
或者,我尝试了BZip2.Decompress
方法 - 观察控制台也写出“900000”而不是“1134592”:
static void Main(string[] args)
{
var compressedDataByteArray = File.ReadAllBytes("data.bz2");
using (var indata = new MemoryStream(compressedDataByteArray))
using (var outdata = new MemoryStream())
{
BZip2.Decompress(indata, outdata, false);
string uncompressedData = Encoding.UTF8.GetString(outdata.ToArray());
Console.WriteLine(uncompressedData.Length);
}
Console.ReadKey();
}
我缺少一些标志或选项吗? 图书馆需要获得许可吗? 我不清楚为什么未压缩的数据总是停在那里。 作为参考,我正在使用#SharpZipLib 1.3.0 Nuget package
这是我正在使用的 bz2 文件: https://drive.google.com/uc?id=1CD0XnJjAITxIrBqD90Msnygc4xnDXk5X&export=download
显然,这可能是 SharpZipLib 的一个缺点,所以我迁移到了 SharpCompress,它现在可以按预期工作:
static void Main(string[] args)
{
var compressedDataByteArray = File.ReadAllBytes("data.bz2");
using (var mstream = new MemoryStream(compressedDataByteArray))
using (var unzipstream = new BZip2Stream(mstream, SharpCompress.Compressors.CompressionMode.Decompress, true))
using (var reader = new StreamReader(unzipstream))
{
string uncompressedData = reader.ReadToEnd();
Console.WriteLine(uncompressedData.Length);
}
Console.ReadKey();
}
非常感谢@CodeCaster。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.