使用Streamreader将文件内容转换为String Array,然后压缩

时间:2014-09-30 13:24:12

标签: c# visual-studio gzipstream

编辑:我需要将文本文件的内容转换为字符串数组,将它们写入另一个 - 无类型文件,并将创建的文件压缩为gzip。

下面我提供了我能够发现的答案,以及减压过程,如果需要的话。

3 个答案:

答案 0 :(得分:1)

.NET Framework在基础库中提供了System.IO.Compression.DeflateStream类;它实现了DEFLATE压缩算法。 zlib流只是zlib魔术字节,后面是使用DEFLATE算法压缩的内容。

哎呀,我给出了“zlib”流的说明,这些流比gzip更原始。除了deflate压缩内容之外,gzip还有一个目录和其他内容。

对于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);
            }
        }

它不是最漂亮的编码,但它似乎为我提供了我所追求的东西。如果其他人有任何可以简化事情的东西,我仍然喜欢听到它!