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
版权声明:如果感觉文章哪里写的不对或者存在疑问,欢迎留言,共同学习、进步!
蓝色字体为链接