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;
            }
        }
    }

在反序列化部分我收到错误:

mscorlib.dll 中出现“System.Runtime.Serialization.SerializationException”类型的未处理异常

附加信息:二进制流“0”不包含有效的二进制标头 BinaryHeader。可能的原因:无效的流或序列化和反序列化之间的对象版本更改。

如何正确反序列化文件?我的错误在哪里?

谢谢你

4

1 回答 1

0

您可能希望让 MMF 实现ISerializable并实现 GetObjectData 方法。

于 2012-08-16T14:41:11.523 回答