0

クラスをファイルに書き込んで、ファイルからクラスを開こうとしています。これは私にとってはうまくいきます。ただし、ファイル サイズが非常に大きくなります。(65 MB、.rar で圧縮すると 1 MB になります)。

これにより、ファイルに書き込む前にデータを圧縮できると考える理由が得られました。

私の元の機能は次のとおりです。

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 に答える