编辑:我需要将文本文件的内容转换为字符串数组,将它们写入另一个 - 无类型文件,并将创建的文件压缩为gzip。
下面我提供了我能够发现的答案,以及减压过程,如果需要的话。
答案 0 :(得分:1)
.NET Framework在基础库中提供了System.IO.Compression.DeflateStream
类;它实现了DEFLATE压缩算法。 zlib流只是zlib魔术字节,后面是使用DEFLATE算法压缩的内容。
对于gzip,请使用框架的System.IO.Compression.GZipStream
类,如Mike_G的答案所示。
答案 1 :(得分:1)
这是我用来gzip一个对象的东西:
byte[] initialBytes = //object serialized to bytes
byte[] compressedBytes;
using (MemoryStream stream = new MemoryStream(initialBytes))
{
using (MemoryStream output = new MemoryStream())
{
using (GZipStream zipper = new GZipStream(output, CompressionMode.Compress))
{
Pump(stream, zipper);
}
compressedBytes = output.ToArray();
}
}
return compressedBytes;
//pump method
internal static void Pump(Stream input, Stream output)
{
byte[] bytes = new byte[4096];
int n;
while ((n = input.Read(bytes, 0, bytes.Length)) != 0)
{
output.Write(bytes, 0, n);
}
}
如果我需要做一个文件:
byte[] result;
using(FileStream file = //some filestream I created)
{
file.Position = 0;
using (MemoryStream output = new MemoryStream())
{
using (GZipStream zipper = new GZipStream(output, CompressionMode.Compress))
{
Pump(file, zipper);
}
result = output.ToArray();
}
}
return result;
答案 2 :(得分:0)
这就是我在这种情况下诉诸的。
string jobDirVar = [FilePath];
byte[] bytesToCompress = File.ReadAllBytes(jobDirVar);
byte[] decompressedBytes = new byte[bytesToCompress.Length];
using (FileStream fileToCompress = File.Create(FilePath))
{
using (GZipStream compressionStream = new GZipStream(fileToCompress, CompressionMode.Compress))
{
compressionStream.Write(bytesToCompress, 0, bytesToCompress.Length);
}
}
using (FileStream fileToDecompress = File.Open(FilePath, FileMode.Open))
{
using (GZipStream decompressionStream = new GZipStream(fileToDecompress, CompressionMode.Decompress))
{
decompressionStream.Read(decompressedBytes, 0, bytesToCompress.Length);
}
}
它不是最漂亮的编码,但它似乎为我提供了我所追求的东西。如果其他人有任何可以简化事情的东西,我仍然喜欢听到它!