流是C#中比较重要的一个概念,很多关键技术都需要用到流。何为流呢?可以理解流为江河中水的流动,不过C#中则为信息流,我们可以把信息写入流,也可以读出。比如以文件读写操作为例,首先以某种方式(如只读)打开文件,相当于建立了通往此文件的流,然后就可以从此流中读取信息。C# stream为抽象类,只能用来定义。由它派生出三个派生类:MemoryStream(内存流),BufferedStream(缓存流)以及filestream(文件流)。以下例子由http://www.2cto.com/kf/201203/123535.html转载而来,并且此例子有更加详细的说明。本例子由memorystream进行构造,此类进行数据读取格式为byte类型,中间需要用到相关转化(encoding类),其实流的操作均为byte类型,采用不同的reader,可以简化操作,此例子以memorystream的write,read方法来进行相关操作。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO; namespace StreamStu
{
class Program
{
static void Main(string[] args)
{
//本节主讲stream的用法
//通过二进制把,数据读入流,并读出流
string testStr = "Stream!Hello world";//读入的数据(字符串)
byte[] buffer = null;//中间数据传输用的缓冲字节数组
byte[] readBuffer = null;//读取数据的缓冲字节数组
char[] readArr;//解码出char的缓冲字符数组
string stringArr = string.Empty;//存放解码出的string //开始文件的读入;
Console.WriteLine("初始字符串为:" + testStr);
using (Stream stream = new MemoryStream())
{
if (stream.CanWrite)//判断当前流是否可写入
{
//数据写入
buffer = Encoding.Default.GetBytes(testStr);
stream.Write(buffer, , );//从stream.position=0的位置读入三个值,新的位置位于3+1的位置;
long newStreamPos = stream.CanSeek ? stream.Seek(, SeekOrigin.Current) : ;//读取位置从当前为位置偏移3;
if ((int)newStreamPos < buffer.Length)//判断移动位置是否超出总长度;
{
stream.Write(buffer, (int)newStreamPos, buffer.Length - (int)newStreamPos);
}
} stream.Position = ;//读取时,初始位置设为0
readBuffer = new byte[buffer.Length];
int count = stream.CanRead ? stream.Read(readBuffer, , buffer.Length) : ;//从流中读入readbuffer,read返回值为读入的个数,write无返回值 //将readbuffer转换为string
int charCount = Encoding.Default.GetCharCount(readBuffer, , count);//确定解码的字符个数,即readbuffer中,从0开始,解码count个
readArr = new char[charCount];
Encoding.Default.GetDecoder().GetChars(readBuffer, , count, readArr, );//从readbuffer中0位置开始解码,解码count个到readarr,并从readarr的0位置开始写入
for (int i = ; i < readArr.Length; i++)
{
stringArr += readArr[i];
}
stream.Close();
}
Console.WriteLine(stringArr); Console.ReadKey(); }
}
}

其实进行数据读取时,可以用streamReader,可以省略将byte数据转化成char[]进而转化成string的操作,代码如下:

                //用streamreader方法数据读取
//stream.Position = 0;//读取时,初始位置设为0
//StreamReader sr = new StreamReader(stream);
//string str = sr.ReadToEnd();
//Console.WriteLine(str);

可以直接读取出string来。

本文代码示例属于转载,此例子是一个不错的基础例子,值得反复思考,有问题一起讨论

最新文章

  1. 决策树-ID3
  2. 过滤关键字防止XSS攻击
  3. 如何让你的App适配iOS7?
  4. 30 algorithm questions study
  5. centos 6.4/redhat 6.4 安装gitlab
  6. POJ 2912 Rochambeau(难,好题,枚举+带权并查集)
  7. makefile的常用规则
  8. win7下自写驱动导致开机蓝屏调试过程
  9. Smoke Testing(冒烟测试)
  10. C语言-表达式
  11. 用Left join代替not in
  12. 201521123098 《Java程序设计》第9周学习总结
  13. 关于IOS的屏幕适配(iPhone)——资源适配
  14. 洗礼灵魂,修炼python(79)--全栈项目实战篇(7)—— 多级目录菜单之地址管理系统升级版
  15. react中的路由模块化
  16. [Android Pro] 跨平台反编译工具 jadx (ubuntu亲测 可用)
  17. MacBook Apache服务
  18. C#--类之隐藏基类的成员
  19. diff命令的参数详解和实例
  20. 大话https演化过程(对称加密、非对称加密、公钥、私钥、数字签名、数字证书)

热门文章

  1. 用Python怎么SSH到网络设备
  2. redirectTo、navigateTo与switchTap区别
  3. Java 基础篇之异常
  4. Spring boot 梳理 - WebMvcConfigurer接口 使用案例
  5. Spring 梳理-JdbcTemplate简介
  6. tomcat配置目录及安装说明
  7. Case1-basic network framework/Related organization‘s name
  8. redis列表底层实现之一——链表
  9. Android self_adaption of screen
  10. 【网络安全】给你讲清楚什么是XSS攻击