C#中数据流(文件流、内存流、网络流等)相关知识点梳理

基本概念

C#中数据流的应用体现在方方面面,现在针其常用的几种类进行一次梳理。
数据流包括文件流(FileStream)、内存流(MemoryStream)、网络流(NetworkStream)以及读写流如StreamReader、StreamWriter、BinaryReader和BinaryWriter等。
数据流是什么?
按照定义,数据流是是对串行传输数据的一种抽象表示,是对I/O的一种抽象。我们可以通过将文件夹数据、代码生成结果、设备、内存等各种形式的数据用流的方式进行传输。从程序的角度出发,如果将数据从来源取出,可以用StreamReader把数据储存在内存缓冲区;如果将数据写入目的地,可以使用StreamWriter把内存缓冲区的数据写入目标地址。
数据流的操作包括写、读,查找,其写入和读取操作都是基于字节的。
Stream是一种虚拟类,是所有数据流的基类,无法创建实例。

FileStream

FileStream类主要用于读写磁盘文件,其读写方法如下所示:

//文件流读取FileStream fileStream = File.Open(@"D:\Key.txt", FileMode.Open);//初始化待读取文件流byte[] array = new byte[fileStream.Length];//初始化字节数组,用来存储读取到的字节fileStream.Read(array, 0, array.Length);//读取文件流中数据,写入到字节数组中fileStream.Close(); //关闭流string str = Encoding.Default.GetString(array);//将字节数组内容转化为字符串Console.WriteLine(str);//写文件流byte[] array1 = new byte[1024];array1 = Encoding.UTF8.GetBytes(str);FileStream fileStream1 = new FileStream(@"D:\Key.txt", FileMode.OpenOrCreate, FileAccess.Write);fileStream1.Write(array1, 0, array1.Length);

NetWorkStream

NetWorkStream类是专门用来处理服务器与客户端通信的流。它在网络编程中经常使用,主要是用来处理类似Socket、TcpClient和TcpListener这些类中得到的流。

SocketClient = Listener.AcceptSocket();         //等待客户端的socket
NetStream = new NetworkStream(SocketClient);    //有客户端连接成功后,创建网络流
ServerReader = new StreamReader(NetStream);     //读数据
ServerWriter = new StreamWriter(NetStream);     //写数据    

MemoryStream

MemoryStream类用于保存数据到内存中并可以直接访问内存数据。比如说网络中传输数据时可以用流的形式,当我们收到这些流数据时就可以用MemoryStream类来存储处理。内存流相对于字节数组而言,具有流特有的特性,并且容量可自动增长,在数据加密以及对长度不定的数据进行缓存等场合,使用内存流比较方便。
内存流有多种构造函数,都有不同的作用,但基本都是对内存流容量的定义。

            MemoryStream myStream = new MemoryStream();//将待写入数据从字符串转换为字节数组UnicodeEncoding encoder = new UnicodeEncoding();byte[] bytes = encoder.GetBytes("魑魅魍魉);//向内存流中写入数据for (int i = 0; i < 10; i++){Console.WriteLine("第{0}写入新数据", i);myStream.Write(bytes, 0, bytes.Length);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dns服务 很多问题,后续再研究

慕课网&#xff1a;http://www.imooc.com/video/5220 参考&#xff1a;http://jingyan.baidu.com/article/870c6fc32c028eb03fe4be30.html http://www.tuicool.com/articles/aUNzMfi http://www.07net01.com/linux/dnszhucongfuzhijiquyuchuansong_505144_1373161402.html http…

LINUX下用脚本实现JDK+TOMCAT

这几天真是累。常常下半夜3点睡觉。是因为这段时间对LINUX下的SHELL编程喜欢上了。 一时弄的忘了睡觉。还好&#xff0c;累没白累。遍写了一个JDKTOMCAT的自动安装&#xff0c;配置的脚本 在这里我把配置出来的成果拿来和大家分享一下。希望有高手来指定一下&#xff0c;我在编…

【图像处理】——图像增强Python实现直方图均衡化

目录 一、相关概念 1、灰度直方图概念(hist) 2、灰度概率累积函数(cdf) 3、灰

C#常见编码方式总结

一、概念 我们知道计算机是基于二进制来表示数据的&#xff0c;那么对于字母和汉字等字符用二进制如何表示&#xff1f; 这就需要用一种编码方式将这些字母或者符号转换二进制表示。首先需要对字符集进行编码表示&#xff0c;每个编码代表一个固定的字符&#xff0c;然后再将字…

Spring中ApplicationContext加载机制

详见&#xff1a;http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp33 加载器目前有两种选择&#xff1a;ContextLoaderListener和ContextLoaderServlet。 这两者在功能上完全等同&#xff0c;只是一个是基于Servlet2.3版本中新引入的Listener接口实现&#xff0c;…

Codeforces 724 C. Ray Tracing

Codeforces 724 C. Ray Tracing 题目来源 codeforces 题意&#xff1a; 有一些传感器按输入坐标分布在图上&#xff0c;有一道光从(0,0)沿45角出射&#xff0c;遇到边按反射法则反射&#xff0c;遇到角落结束。 问每一个点被经过的时间&#xff0c;并按照输入顺序输出。题解&am…

CDN架构以及原理分析

详见&#xff1a; http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp61 在不同地域的用户访问网站的响应速度存在差异,为了提高用户访问的响应速度、优化现有Internet中信息的流动,需要在用户和服务器间加入中间层CDN. 使用户能以最快的速度&#xff0c;从最接近用…

基于VS2019的Eigen库安装详解

概念 Eigen是一个C开源线性代数库&#xff0c;以提供有关矩阵的的线性代数运算&#xff0c;解方程等功能。Eigen在很多领域如信号处理&#xff0c;图像处理&#xff0c;深度学习等起到重要作用&#xff0c;学习其操作方法&#xff0c;可以灵活的对线性代数、矩阵和矢量将进行计…

【图像处理】——Python图像分割边缘检测算法之二阶梯度算子(laplace、log、dog算子)

目录 一、二阶算子简介 二、laplace(拉普拉斯算子) 1、什么是拉普拉斯算子

C#中不常见的运算符功能汇总

介绍 C#有很多运算符&#xff0c;可分为以下几种&#xff1a;算数运算符&#xff0c;比较运算符&#xff0c;条件运算符&#xff0c;赋值运算符&#xff0c;逻辑运算符。下面对不常见的运算符进行汇总。 概念 条件运算符 ?(可空类型修饰符) 引用类型可以使用空引用表示一…

SQL Server2012中如何通过bak文件还原SQL Server2012数据库

1 登陆完数据库后&#xff0c;不要新建数据库&#xff0c;直接点击“数据库”然后右击"还原数据库"。 2 在"源"选项中选择"设备"。 3 选择相应的bak文件并进行添加。 4 添加完之后点击确定&#xff0c;注意在目标这一栏中数据库名称都可以不用写…

【图像处理】——Python OpenCV实现形态学膨胀、腐蚀开闭操作(可以用于图像滤波、图像分割等)

转载博客请注明详细地址,谢谢本文讲了形态学基本操作膨胀腐蚀开闭操作的原理本文讲解了用OpenCV-Python实现形态学操作目录 一、形态学简述 1、简介 2、一些基本定义 3、结构元素

thrift服务windows环境编译失败

为什么80%的码农都做不了架构师&#xff1f;>>> 修改maven的pom文件 <!--thrift服务 api 层&#xff0c;开发时 windows系统需指定exe程序位置--> <properties> <thrift.exe.path>E:/Thrift/thrift-0.9.3.exe</thrift.exe.path&g…

编译包含Google Play服务App的SDK版本问题

编译包含Google Play服务App的SDK版本问题 错误信息&#xff1a;No Resouce identifier found for attribute ‘touchscreen BlocksFocus’ in package ‘android’这个错误通常是App引用了Google Play时候发生。Xamarin编译该类App&#xff0c;需要目标SDK版本必须是21或者更高…

《第一行代码》学习笔记35-服务Service(2)

1.Android的UI线程不安全&#xff0c;想要更新应用程序里的UI元素&#xff0c;则须在主线程中进行&#xff0c;否则会出现异常。 2.Android不允许在子线程里进行UI操作&#xff0c;对于该情况&#xff0c;Android提供了一套异步消息处理机制&#xff0c;完美解决在子线程中进行…

C#中HP-Socket通信组件详解

概念 HP-Socket 是国产的TCP、UDP和HTTP 通信框架&#xff0c;包含服务端、客户端和 Agent 组件&#xff0c;提供 C/C、C#、Java、Python 等多种编程语言接口。 与传统TCP通讯区别的是HP-Socket 对通信层做到了完全封装&#xff0c;程序不必关注通信层的任何细节&#xff1b;H…

mail发送的内容显示为附件的解决办法

利用命令: cat data.mail | mail -v -s "mail test" xxxqq.com 发送的内容在收件箱中显示为附件tcmimi.xxx.bin. 这是因为mail期望文件输入的是unix格式的文本,也就是说换行符使用\n而不是\r\n,如果文本中包含\r(使用set list,显示为^M),这种情况下mail会认为该文件…

【图像处理】——Python+opencv实现二值图像的轮廓边界跟踪以及轮廓面积周长的求解(findcontours函数和contourArea函数)

目录 一、函数 cv.findContours 二、轮廓层级(返回参数hierarchy) 三、轮廓寻找方式 1. RETR_LIST 2. RETR_TREE

基于C#的ico图标制作与应用

一、简介 ICO是什么 ICO 是 Windows 开发的一种图标格式&#xff0c;是一种可以存储多张图案、多尺寸、多色板的图标文件。 一般用IcoFX软件来创建或修改ico文件。 点击下载 Ico文件创建与应用 1.单击打开按钮&#xff0c;选择一个图像文件&#xff0c;确定后一般出现以下…

第5章--高级数据管理

5.1 数值和字符处理函数 常用的数学函数 统计函数 例子&#xff1a; > x <- c(1,2,3,4,5,6,7,8) > mean(x) [1] 4.5 > sd(x) [1] 2.44949 默认情况下&#xff0c;函数scale()对矩阵或数据框的指定列进行均值为0、标准差为1的标准化&#xff1a; newdata <- scal…