zoukankan      html  css  js  c++  java
  • FileStream类学习小结

            使用FileStream能够对对系统上的文件进行读、写、打开、关闭等操作。并对其他与文件相关的操作系统提供句柄操作,如管道,标准输入和标准输出。读写操作可以指定为同步或异步操作。FileStream对输入输出进行缓冲,从而提高性能。

           关于FileStream更详细的介绍可移步:http://www.cnblogs.com/kissdodog/archive/2013/01/19/2868117.html查看。本文通过一个简单的例子说明FileStream中异步读操作BeginRead。

    BeginRead方法的定义如下:

    public override IAsyncResult BeginRead(byte[] array, int offset, int numBytes, AsyncCallback userCallback, object stateObject);
    

      参数信息:

    array 要读入数据的缓冲区。
    offset array 中的字节偏移量,指定开始读取的位置
    numBytes 指定最多读取的字节数
    userCallBack 异步读操作完成后调用的方法
    stateObject 一个用户提供的对象,它将该特定的异步读取请求与其他请求区别开来。

             其中userCallBack是一个无返回值的委托,参数为IAsyncResult,AsyncCallBack定义如下:

    public delegate void AsyncCallback(IAsyncResult ar);

     该定义位于System命名空间下,它需要传入一个IAsyncResult的实例作为参数,无返回值,完成异步读操作完成之后要执行的操作。

            stateObject参数是一个Object类型,这意味着可以传入任意类型的参数,该参数可以在回调函数中使用,即ar.AsyncState.

    话不多说,先粘代码:

    class Program
        {
    
            System.AsyncCallback callBack;
            static void Main(string[] args)
            {
                Program pro = new Program();
                pro.FileStreamTest();
            }
    
            private void FileStreamTest()
            {
                callBack += ReadFileCallBack;
                string filePath = AppDomain.CurrentDomain.BaseDirectory + "image.txt";
                using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite))
                {
                    byte[] buffer = new byte[fs.Length];
                    fs.Seek(0, SeekOrigin.Begin);
                    IAsyncResult ar = fs.BeginRead(buffer, 0, (int)fs.Length, callBack, buffer);
                    fs.EndRead(ar);
                }
            }
    
            private void ReadFileCallBack(IAsyncResult ar)
            {
                
                if (ar != null && ar.IsCompleted==true)
                {
                    byte[] buffer = ar.AsyncState as byte[];
                    Console.WriteLine("文件读取完成"); 
                }
            }
        }

            方法FileStreamTest首先给委托callBack绑定回调方法ReadFileCallBack,ReadFileCallBack方法在异步执行完成后在控制台显示文件读取完成。然后初始化一个FileStream实例,通过异步读的方式将文件内容以字节数组形式读入buffer缓冲区内。这里我把buffer当作最后一个参数传入,在回调函数中可以查看其值。最后调用EndRead等待异步执行完成。

            BeginWrite和BeginRead类似,再次不多做介绍。

  • 相关阅读:
    【Python web 开发】购物车功能需求分析和加入购物车功能实现
    【Python web 开发】第九章开发总结
    【Python web 开发】个人中心-用户的收货地址
    【Python web 开发】个人中心-用户留言功能
    自适应网页设计(Responsive Web Design)
    无废话MVC系列教程
    标准查询运算符
    系统泛型委托
    var隐式类型
    自动属性
  • 原文地址:https://www.cnblogs.com/lsy1991/p/8032173.html
Copyright © 2011-2022 走看看