一、文件流

FileStream类主要用于读写磁盘文件。常用于向磁盘存储数据或读取配置文件。

读取文件:

//文件流:读取
FileStream fileStream = File.Open(@"D:\test.txt", FileMode.Open);//初始化文件流
byte[] array = new byte[fileStream.Length];//初始化字节数组,用来暂存读取到的字节
fileStream.Read(array, , array.Length);//读取流中数据,写入到字节数组中
fileStream.Close(); //关闭流
string str = Encoding.Default.GetString(array);//将字节数组内容转化为字符串
Response.Write(str);

写入文件:

//文件流:写入
FileStream fileStream = File.Open(@"D:\test.txt",FileMode.Append);//初始化文件流
byte[] array = Encoding.Default.GetBytes("哈哈123abc");//给字节数组赋值
fileStream.Write(array, , array.Length);//将字节数组写入文件流
fileStream.Close();//关闭流

二、网络流

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

单的TCP同步方式,服务器与客户端通信:

服务器
TcpListener lis=new TcpListener(); //服务器监听
lis.Start();//启动
Socket sock=lis.AcceptSocket();//阻塞,直到有客户端连接 NetworkStream networkStream = new NetworkStream(sock);//得到Socket中的流
if (netStream.DataAvailable) //如果客户端发送了消息
{
byte[] data = new byte[]; //定义一个字节数组,用来存放接收的数据
int len = netStream.Read(data, , data.Length); //从位置开始,读取到字节数组末尾
string line = Encoding.Default.GetString(data, , len); //把收到的字节转换为字符串
}
客户端
TcpClient client = new TcpClient();//客户端tcp对象
client.Connect("127.0.0.1", );//连接服务器
NetworkStream myStream = client.GetStream();//得到网络流 byte[] data = Encoding.Default.GetBytes("Hi,你好"); //首先把输入的字符串消息转换为字节
myStream .Write(data, , data.Length); //向myStream 里写入数据
myStream .Flush(); //刷新流中的数据
myStream .Close();

三、内存流

MemoryStream类主要用于操作内存中的数据。比如说网络中传输数据时可以用流的形式,当我们收到这些流数据时就可以声明MemoryStream类来存储并且处理它们。

MemoryStream操作字符串:

string str = "Hi!你好!";
byte[] array = Encoding.UTF8.GetBytes(str);//将字符串转化为字节数组
MemoryStream memory = new MemoryStream(array);//初始化MemoryStream类
byte[] arrayNew = memory.ToArray();//将内存中的数据转换为字节数组
string strNew = Encoding.UTF8.GetString(arrayNew);//将字节数组转换为字符串

 四、StreamReader/StreamWriter

StreamReader/StreamWriter主要用来处理流数据。它们分别提供了高效的读取/写入功能。

读取:

//StreamReader 读取
StreamReader reader = new StreamReader(@"D:\test.txt",Encoding.Default);//初始化读取 设置编码格式,否则中文会乱码
string readStr = reader.ReadLine();//从流中读取一行 reader.ReadToEnd()读取全部
reader.Close();//关闭流

写入:

//StreamWriter 写入
StreamWriter writer = new StreamWriter(@"D:\test1.txt");//初始化写入
writer.WriteLine("Hi 你好123");//写入一行
writer.Close();

五、TextReader/TextWriter

TextReader/TextWriter类主要用来处理流数据。它们分别提供了高效的文本流读取/写入功能。

//TextReader/Writer读写
TextReader textReader = new StringReader("Hi 你好");//初始化读取流
TextWriter textWriter = new StringWriter();//初始化写入流 char[] c=new char[];
int chars = ;
while ((chars = textReader.Read(c, , )) > )//把流中数据写入到字符数组中 读取流中数据
{
textWriter.Write(c, , );//从字符数组中读取流
} string str= textWriter.ToString();//将流中数据写到字符串中
textReader.Close();//关闭流
textWriter.Close();

注意事项:

1.流使用后必须要关闭。

2.把流中数据加载到内存时要考虑内存溢出等问题。

文章来源>>

C#流总结(文件流、内存流、网络流、BufferedStream、StreamReader/StreamWriter、TextReader/TextWriter)的更多相关文章

  1. Java之IO流进阶篇:内存流,打印流,对象流

    Java中的IO流,即为输入输出流.所谓输入输出流,都是相对于程序而言,程序就是这个参照物.一张图看懂输入输出流: 输入流抽象基类:InputStream,Reader 输出流抽象基类:OutputS ...

  2. 使用文件流与使用缓冲流完成文件的复制操作性能对比,文件流 FileInputStream FileOutputStream 缓冲流: BufferedInputStream BufferedOutputStream

    package seday06; import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOExc ...

  3. 零基础学习java------day17------缓冲字节流,转换字节流,简化流,缓冲字符流,序列化和对象流

    1. 缓冲字节流 缓冲区:缓冲区实质上是一个数组.通常它是一个字节数组,但是也可以使用其他种类的数组.但是一个缓冲区不 仅仅 是一个数组.缓冲区提供了对数据的结构化访问,而且还可以跟踪系统的读/写进程 ...

  4. delphi中如何将一整个文件读入内存

    来源 https://bbs.csdn.net/topics/390985048 分配一块大内存吧,要是一下申请不了64M那么大,就多申请几块小的,用个链表连起来.用FileStream类的方法读取文 ...

  5. .net 流(Stream) - 文件流、内存流、网络流

    转自:http://www.oseye.net/user/kevin/blog/85 一.文件流 FileStream FileStream流继承与Stream类,一个FileStream类的实例实际 ...

  6. 文件读写(三)利用FileStream类操作字节数组byte[]、BinaryFormatter、内存流MemoryStream

    一.Stream类概述 在.NET Framework中,文件和流是有区别的.文件是存储在磁盘上的数据集,它具有名称和相应的路径.当打开一个文件并对其进行读/写时,该文件就称为流(stream).但是 ...

  7. 用内存流 文件流 资源生成客户端(Delphi开源)

    正文:很多木马生成器就是用的内存流和文件流生成客户端的,废话不多说了,代码如下: unit Main; interface usesWindows, Messages, SysUtils, Varia ...

  8. c#中字节数组byte[]、图片image、流stream,字符串string、内存流MemoryStream、文件file,之间的转换

    字节数组byte[]与图片image之间的转化 字节数组转换成图片 public static Image byte2img(byte[] buffer) { MemoryStream ms = ne ...

  9. -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流

      File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) ...

随机推荐

  1. DSS 搭建手机流媒体服务器

    最近研究了一下手机流媒体服务器的搭建,目的是实现通过3G手机看在线视频. 开始的时候研究了一下 Tudou手机版 ,可它哪并没有实现在线播放,因为视频地址是 http 协议的.参看了许多文章,终于了解 ...

  2. 89、Android EditText 悬浮停靠

    package com.willen.topFloatDemo; import android.content.Context; import android.os.Handler; import a ...

  3. JAVA中String与StringBuffer的区别

    String和StringBuffer的区别,网上资料可以说是数不胜数,但是看到这篇文章,感觉里面做的小例子很有代表性,所以转一下,并自己做了一点总结. 在java中有3个类来负责字符的操作. 1.C ...

  4. EXT gridGroup

    Ext.define('Task', { extend: 'Ext.data.Model', idProperty: 'id', fields: [ { name: 'Customer_name', ...

  5. [HDU 4417] Super Mario (树状数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 题目大意:给你n个数,下标为0到n-1,m个查询,问查询区间[l,r]之间小于等于x的数有多少个 ...

  6. BC-Clarke and five-pointed star(水)

    Clarke and five-pointed star Accepts: 237 Submissions: 591 Time Limit: 2000/1000 MS (Java/Others) Me ...

  7. (整理)C#实现UDP广播

    (一) IP地址解析 IP地址的类型:XXX.XXX.XXX.XXXA类: 1.0.0.1--126.255.255.254 最高位是0: 1个字节的网络地址和3个地址的主机地址 测试地址:127.X ...

  8. cwRsync 配置文件详解

    GLOBAL PARAMETERS(全局参数) The first parameters in the file (before a [module] header) are the global p ...

  9. NEERC 2013, Eastern subregional contest

    I. The old Padawan Time limit: 0.5 secondMemory limit: 64 MB Yoda: Use the Force. Yes. Now, the ston ...

  10. UGUI不规则按钮实现思路

    根据图片的透明度来判断是否点击到了适当区域(如果a值是0,说明完全透明,则判断为没点击,否则判断为触发点击) using UnityEngine; using System.Collections; ...