0

我正在尝试将一个类写入文件并从文件中打开该类。这对我有用;但是,文件大小非常大。(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;
}

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

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?我能做些什么来完成这项工作?

4

1 回答 1

1

我认为您的方法使用DeflateStream错误save()。您必须将其包装using()或显式调用Close()以完成其工作。

于 2015-10-13T10:00:34.000 回答