zoukankan      html  css  js  c++  java
  • 内存映射文件MemoryMappedFile使用

    参考资料: http://blog.csdn.net/bitfan/article/details/4438458

    所谓内存映射文件,其实就是在内存中开辟出一块存放数据的专用区域,这区域往往与硬盘上特定的文件相对应。进程将这块内存区域映射到自己的地址空间中,访问它就象是访问普通的内存一样。

    .NET中,使用MemoryMappedFile对象表示一个内存映射文件,通过它的CreateFromFile()方法根据磁盘现有文件创建内存映射文件,调用这一方法需要提供一个与磁盘现有文件相对应的FileStream对象。

    需要保存的类:

    [Serializable]
        public class MyImg
        {
            public Image img;
            public string name;
        }
    View Code

    MMF定义:

    public class MMF
        {
            private MemoryMappedFile file = null;
            private MemoryMappedViewStream strem = null;
            private MemoryMappedViewAccessor acces = null;
            public MMF()
            {
                file = MemoryMappedFile.CreateOrOpen("myMMF", 1024 * 1024, MemoryMappedFileAccess.ReadWrite);
                strem = file.CreateViewStream();
                acces = file.CreateViewAccessor();
            }
    
            public void Write(int value)
            {
                acces.Write(0, value);
            }
    
            public int Read()
            {
                int value;
                acces.Read(0, out value);
                return value;
            }
    
            public void WriteClass(MyImg img)
            {
                IFormatter format = new BinaryFormatter();
                format.Serialize(strem, img);
            }
    
            public MyImg ReadClass()
            {
                IFormatter format = new BinaryFormatter();
                return format.Deserialize(strem) as MyImg;
            }
        }
    View Code

    界面代码:

    private void button1_Click(object sender, EventArgs e)
            {
                using (OpenFileDialog dlg = new OpenFileDialog())
                {
                    dlg.Filter = "*.png|*.png";
                    if (dlg.ShowDialog() == DialogResult.OK)
                    {
                        this.pictureBox1.Image = Image.FromFile(dlg.FileName);
                        this.label1.Text = Path.GetFileNameWithoutExtension(dlg.FileName);
                    }
                }
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                MyImg img = new MyImg() { img = this.pictureBox1.Image, name = this.label1.Text };
                myFile.WriteClass(img);
            }
    
            private void button3_Click(object sender, EventArgs e)
            {
                MyImg img = myFile.ReadClass();
    
                this.pictureBox1.Image = img.img;
                this.label1.Text = img.name;
            }
    
            private void button4_Click(object sender, EventArgs e)
            {
                label2.Text = myFile.Read().ToString();
            }
    
            private void button5_Click(object sender, EventArgs e)
            {
                myFile.Write(int.Parse(this.textBox1.Text));
            }
    View Code

    参考资料: http://blog.csdn.net/bitfan/article/details/4438458

  • 相关阅读:
    datanode报错Problem connecting to server
    使用命令查看hdfs的状态
    Access denied for user root. Superuser privilege is requ
    ElasticSearch默认的分页参数 size
    SparkStreaming Kafka 维护offset
    【容错篇】Spark Streaming的还原药水——Checkpoint
    251 Android 线性与相对布局简介
    250 Android Studio使用指南 总结
    249 如何解决项目导入产生的中文乱码问题
    248 gradle更新问题
  • 原文地址:https://www.cnblogs.com/gujf2016/p/6229384.html
Copyright © 2011-2022 走看看