GzipStream流读写压缩数据!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.IO.Compression;

namespace ConsoleApplication21
{
    class Program
    {   //写入解压流
        static void SaveCompressedFile(string filename, string data)
        {
            FileStream fileStream = new FileStream(filename, FileMode.Create, FileAccess.Write);
            GZipStream compresssionStream = new GZipStream(fileStream, CompressionMode.Compress);
            StreamWriter writer = new StreamWriter(compresssionStream);
            writer.Write(data);
            writer.Close();
        }
        static string LoadCompressedFile(string filename)
        {   //读解压流
            FileStream fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read);
            GZipStream compressionStream = new GZipStream(fileStream, CompressionMode.Decompress);
            StreamReader reader = new StreamReader(compressionStream);
            string data = reader.ReadToEnd();
            reader.Close();
            return data;


        }
        
        static void Main(string[] args)
        {
            try
            {
                string filename = "ceshi.txt";
                Console.WriteLine("请输入一个字符串进行压缩(会复制100次该字符串后再进行压缩!):");
                string sourceString = Console.ReadLine();
                StringBuilder sourceStringMutiplier = new StringBuilder(sourceString.Length * 100);
                for (int i = 0; i < 100; i++)
                {
                    sourceStringMutiplier.Append(sourceString);
                }
                sourceString = sourceStringMutiplier.ToString();
                Console.WriteLine("原数据有个 {0} 字节", sourceString.Length);
                SaveCompressedFile(filename, sourceString);
                Console.WriteLine("\n数据保存到 {0} ", filename);
                FileInfo compressedFileData = new FileInfo(filename);
                Console.WriteLine("压缩后的文件有个 {0} 字节", compressedFileData.Length);
                string recoveredString = LoadCompressedFile(filename);
                recoveredString = recoveredString.Substring(0, recoveredString.Length / 100);
                Console.WriteLine("\n恢复后的数据是: {0} ",recoveredString);
                Console.ReadKey();
            }
            catch(IOException ex)
            {
                Console.WriteLine("一个IO异常已经抛出!");
                Console.WriteLine(ex.ToString());
                Console.ReadKey();
            }
        }
                                                                                                                                   
GzipStream流读写压缩数据!_第1张图片
上面测试的结果为,压缩比例为10:1,输入不同的字符串会有不同的压缩比例,好真不好说这种压缩方法的优势与缺陷。

你可能感兴趣的:(String,IO,测试,Class)