0

MMF をファイルにシリアル化しようとしていますが、コードは次のとおりです。

class MMF {
    private const string filename = @"c:\NFS";
    private long offset = 0;
    private long length = 194;
    private byte[] buffer;
    public MMF() {
        using (var mmf =
            MemoryMappedFile.CreateFromFile(filename, FileMode.OpenOrCreate, null, offset + length, MemoryMappedFileAccess.ReadWriteExecute)) {
            using (var accessor = mmf.CreateViewAccessor(offset, length, MemoryMappedFileAccess.ReadWriteExecute)) {
                buffer = new byte[194];
                /*FS fs = new FS();
                fs.Files[0].Path = "test";
                accessor.WriteArray<byte>(0, buffer, 0, (int)length);*/
                accessor.ReadArray<byte>(0, buffer, 0, (int)length);
                FS fs = (FS)ToObject(buffer);
                Console.WriteLine(fs.Files[0].Path);
                }
            }
        }
    private byte[] ToByteArray(object source) {
        var formatter = new BinaryFormatter();
        using (var stream = new MemoryStream()) {
            formatter.Serialize(stream, source);
            return stream.ToArray();
            }
        }
    private object ToObject(byte[] source) {
        var formatter = new BinaryFormatter();
        using (var stream = new MemoryStream(source)) {
            formatter.Deserialize(stream);
            return stream;
            }
        }
    }

逆シリアル化の部分でエラーが発生します:

タイプ 'System.Runtime.Serialization.SerializationException' の未処理の例外が mscorlib.dll で発生しました

追加情報: バイナリ ストリーム "0" には、有効なバイナリ ヘッダー BinaryHeader が含まれていません。考えられる原因: 無効なストリームまたはシリアル化と逆シリアル化の間のオブジェクト バージョンの変更。

ファイルを適切にデシリアライズする方法は? 私の間違いはどこですか?

ありがとうございました

4

1 に答える 1

0

MMFにISerializableを実装させ、GetObjectDataメソッドを実装させたい場合があります。

于 2012-08-16T14:41:11.523 に答える