序列化和压缩类到文件

时间:2015-10-13 09:57:19

标签: c# filestream deflatestream

我正在尝试将一个类写入文件并从文件中打开该类。这适合我;但是,文件大小非常大。 (65 MB,以.rar压缩为1MB)。

这让我有理由认为我可以在写入文件之前压缩数据。

我原来的功能是;

public static void save(System system, String filePath){
    FileStream fs = new FileStream(filePath, FileMode.Create);

    try{
        BinaryFormatter bf = new BinaryFormatter();
        bf.Serialize(fs, system);
        fs.Flush();
    }catch(Exception e){
    }finally{
        fs.Close();
    }
}

public static System load(String filePath){
    System system = new System();
    FileStream fs = new FileStream(filePath, FileMode.Open);

    try{
        BinaryFormatter bf = new BinaryFormatter();
        system = (System)bf.Deserialize(fs);
        fs.Flush();
    }catch(Exception e){
    }finally{
        fs.Close();
    }

    return system;
}

压缩I尝试以下操作,但是在加载到系统类时这似乎无法正常工作:

public static void save(System system, String filePath){
    FileStream fs = new FileStream(filePath, FileMode.Create);

    try{
        BinaryFormatter bf = new BinaryFormatter();
        DeflateStream cs = new DeflateStream(fs, CompressionMode.Compress);
        bf.Serialize(cs, system);
        fs.Flush();
    }catch(Exception e){
    }finally{
        fs.Close();
    }
}

public static System load(String filePath){
    System system = new System();
    FileStream fs = new FileStream(filePath, FileMode.Open);

    try{
        BinaryFormatter bf = new BinaryFormatter();
        DeflateStream ds = new DeflateStream(fs, CompressionMode.Decompress);
        system = (System)bf.Deserialize(ds);
        fs.Flush();
    }catch(Exception e){
    }finally{
        fs.Close();
    }

    return system;
}

我是否正确使用DeflateStream?我能做些什么才能做到这一点?

1 个答案:

答案 0 :(得分:1)

我认为您在DeflateStream方法中使用了save()错误。您必须将其包装在using()中或明确调用Close()才能完成其工作。