[正文]流-基类Stream

Stream是一个abstract(抽象类)不能直接实例化。


以下代码只是单个对方法的描述,直接复制到编译器后报错的。

            //流
            Stream st = new FileStream("1.txt", FileMode.Open);

            #region 读取流

            //流的读取时间限制
            st.ReadTimeout = 1000;

            btSrtReader = new byte[st.Length];

            //同步把流写入byte组
            int i1 = st.Read(btSrtReader, 0, btSrtReader.Length);

            //异步把流写入byte组
            Task<int> i2 = st.ReadAsync(btSrtReader, 0, btSrtReader.Length);

            //异步把流写入byte组,可调用回调函数
            IAsyncResult i3 = st.BeginRead(btSrtReader, 0, btSrtReader.Length, x => { }, "");
            //IAsyncResult i3 = st.BeginRead(btSrtReader, 0, btSrtReader.Length, new AsyncCallback(myReadCallBack), "");
            //异步读取完成,返回读取的字节数
            int i4 = st.EndRead(i3);

            //读取流的一个字节,并把流的位置推向下一个字节
            int i5 = st.ReadByte();

            #endregion

            #region 写入流

            //流的写入时间限制
            st.WriteTimeout = 1000;

            btSrtReader = new byte[st.Length];
            int i1 = st.Read(btSrtReader, 0, btSrtReader.Length);

            string str = "这是一个字符串";
            btSrtReader = Encoding.Default.GetBytes(str);
            //同步,在流的末尾添加btSrtReader
            st.Write(btSrtReader, 0, btSrtReader.Length);
            //st.Write(btSrtReader, 1, btSrtReader.Length);//报错

            st.Flush();
            st.Dispose();
            st.Close();



            #region 修改流

            //修改流,先新建一个流,再把原先的流转换成byte组,修改这个数组,再写入新的流
            Stream st3 = new FileStream("3.txt", FileMode.Create);

            //读另外的一个流
            st = new FileStream("1.txt", FileMode.Open);

            str = "这是一个字符串";
            btSrtReader = Encoding.Default.GetBytes(str);

            //在知道文本末尾是你知道 "这是一个字符串" 然后想删除它
            byte[] btSrtReader1 = new byte[st.Length - btSrtReader.Length];
            int i2 = st.Read(btSrtReader1, 0, btSrtReader1.Length);

            st3.Write(btSrtReader1, 0, btSrtReader1.Length);

            st3.Flush();
            st3.Dispose();
            st3.Close();

            #endregion

            #region 异步写入

            //异步,在流的末尾添加btSrtReader
            Task i2 = st.WriteAsync(btSrtReader, 0, btSrtReader.Length);

            //异步把流写入byte组,可调用回调函数
            IAsyncResult i3 = st.BeginWrite(btSrtReader, 0, btSrtReader.Length, x => { }, "");
            //IAsyncResult i3 = st.BeginWrite(btSrtReader, 0, btSrtReader.Length, new AsyncCallback(myReadCallBack), "");
            //结束异步写的操作
            st.EndWrite(i3);

            //st.Seek(st.Length, SeekOrigin.End);
            st.Seek(st.Length, SeekOrigin.Current);
            //把3插入当前流的位置,并将流内的位置向前推进一个字节。
            st.WriteByte(70);//F ASCII码表
            st.WriteByte(89);//Y ASCII码表

            #endregion

            #endregion

            #region 复制

            btSrtReader = new byte[st.Length];
            st.Read(btSrtReader, 0, btSrtReader.Length);
            //读取的btSrtReader不为空?

            Stream st2 = new FileStream("2.txt", FileMode.Create);
            st.CopyTo(st2);//同步:从st复制到st2,2.txt中的内容就等于1.txt中的内容
            //st.CopyToAsync(st2, 100);//异步:从st复制到st2

            btSrtReader = new byte[st2.Length];
            st2.Read(btSrtReader, 0, btSrtReader.Length);
            //读取的btSrtReader为空?

            string str = Encoding.GetEncoding("GB2312").GetString(btSrtReader);
            //string str = Encoding.Default.GetString(btSrtReader);


            //好像对一个流写入,复制之后,再取读这个新的流,读到的内容是空的,但这个流的确改变了。


            #endregion




作者:FengYang

博客地址:http://blog.csdn.net/qq_28140365

版权声明:如果感觉文章哪里写的不对或者存在疑问,欢迎留言,共同学习、进步!

蓝色字体为链接

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值