流就是一个类的对象,很多文件的输入输出操作都以类的成员函数的方式来提供;

流其实是一种信息的转换,是有序的,有输入和输出流(IO);

1.FileStream

文件流,读取和保存文件操作使用;

//写入
FileStream fs = new FileStream("data.txt", FileMode.OpenOrCreate);
string msg = "littlePerilla";
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(msg);
fs.Write(bytes, 0, bytes.Length);
fs.Flush();
fs.Close(); //读取
FileStream fs = new FileStream("data.txt", FileMode.Open, FileAccess.Read);
byte[] bytes = new byte[fs.Length];
fs.Read(bytes, 0, bytes.Length);
char[] c = Encoding.UTF8.GetChars(bytes);
fs.Flush();
fs.Close();

2.StreamReader 和 StreamWriter

粒度为字符的流;

void StreamWrite()
{
string path = "test.txt";
//创建StreamWriter 类的实例
StreamWriter streamWriter = new StreamWriter(path);
streamWriter.WriteLine("Perilla");
streamWriter.WriteLine("13112345678");
//刷新缓存
streamWriter.Flush();
//关闭流
streamWriter.Close();
} void StreamReader()
{
//定义文件路径
string path = "test.txt";
//创建 StreamReader 类的实例
StreamReader streamReader = new StreamReader(path);
//判断文件中是否有字符
while (streamReader.Peek() != -1)
{
//读取文件中的一行字符
string str = streamReader.ReadLine();
Debug.Log(str);
}
streamReader.Close();
}

3.BinaryWriter 和 BinaryReader

粒度为字节的读写流;

// 读取文件
void ReadFile()
{
FileStream fs = new FileStream("data.txt", FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs); //以二进制方式读取文件中的内容
int i = r.ReadInt32();
float f = r.ReadSingle();
double d = r.ReadDouble();
bool b = r.ReadBoolean();
string s = r.ReadString();
Debug.Log(i);
Debug.Log(f);
Debug.Log(d);
Debug.Log(b);
Debug.Log(s); r.Close();
fs.Close();
} // 写入文件
void WriteFile()
{
FileStream fs = new FileStream("data.txt", FileMode.OpenOrCreate);
BinaryWriter w = new BinaryWriter(fs); //以二进制方式向创建的文件中写入内容
w.Write(1123);
w.Write(0.3135f);
w.Write(0.3188946);
w.Write(true);
w.Write("LittlePerilla"); w.Close();
fs.Close();
}

4.MemoryStream

内存的读写流,字节粒度,支持Position和Seek操作,自由度更高;

支持异步读写,不需要手动释放和开辟内存;

支持在任意位置修改操作;

class Program
{
static void Main(string[] args)
{
string strValue = "LittlePerillaIsSuperHero";
MemoryStream ms = new MemoryStream();
ms.Write(Encoding.UTF8.GetBytes(strValue), 0, strValue.Length); Console.WriteLine(ms.Position);
//打印测试
byte[] byte1 = ms.GetBuffer();
string str1 = Encoding.UTF8.GetString(byte1);
Console.WriteLine(str1); ms.Seek(2, SeekOrigin.Current);
ms.ReadByte();
ms.ReadByte();
ms.ReadByte();
ms.ReadByte();
byte[] bytes3 = ms.ToArray();
foreach (byte b in bytes3)
{
Console.Write(b + "-");
}
str1 = Encoding.UTF8.GetString(bytes3);
Console.WriteLine("\n"+str1);
//这里说明ms.ReadByte不会截断读完的数据 MemoryStream ms2 = new MemoryStream();
byte[] bytes6 = Encoding.UTF8.GetBytes("abcde");
ms2.Write(bytes6, 0, bytes6.Length);
Console.WriteLine(ms2.Position); //等价
ms2.Position = 0;//ms2.Seek(0, SeekOrigin.Begin); byte[] byteArray = new byte[5] { 110, 110, 110, 110, 110 };
ms2.Read(byteArray, 2, 1);
Console.WriteLine(Encoding.UTF8.GetString(byteArray));
//结果为nnann,说明讲ms2中的数据读进byteArray中偏移2的位置,且只读取1个字节; //指定位置写入
MemoryStream ms3 = new MemoryStream();
byte[] bytesArr = Encoding.ASCII.GetBytes("abcdefg");
ms3.Write(bytesArr, 0, bytesArr.Length);
ms3.Position = 2;
ms3.WriteByte(97); //97代表的是a 这段代码的意思是,将原先第二个的c替换为a
string str = Encoding.ASCII.GetString(ms3.ToArray());
Console.WriteLine(str); //输出 abacdefg Console.ReadKey();
} }

5.NetworkStream

为网络访问提供数据的基础流;用于 Stream 在阻止模式下通过套接字发送和接收数据的方法;

可以将类用于 NetworkStream 同步和异步数据传输;

创建NetworkStream必须提供Socket

详细不适合在这里讨论;待完善吧;

C# 中的Stream流的更多相关文章

  1. 理解nodejs中的stream(流)

    阅读目录 一:nodeJS中的stream(流)的概念及作用? 二:fs.createReadStream() 可读流 三:fs.createWriteStream() 可写流 回到顶部 一:node ...

  2. java中的Stream流

    java中的Stream流 说到Stream便容易想到I/O Stream,而实际上,谁规定"流"就一定是"IO流"呢?在Java 8中,得益于Lambda所带 ...

  3. 【Java8新特性】面试官问我:Java8中创建Stream流有哪几种方式?

    写在前面 先说点题外话:不少读者工作几年后,仍然在使用Java7之前版本的方法,对于Java8版本的新特性,甚至是Java7的新特性几乎没有接触过.真心想对这些读者说:你真的需要了解下Java8甚至以 ...

  4. Java8中的Stream流式操作 - 入门篇

    作者:汤圆 个人博客:javalover.cc 前言 之前总是朋友朋友的叫,感觉有套近乎的嫌疑,所以后面还是给大家改个称呼吧 因为大家是来看东西的,所以暂且叫做官人吧(灵感来自于民间流传的四大名著之一 ...

  5. Node 中的 stream (流)

    流的概念 流(stream)在 Node.js 中是处理流数据的抽象接口(abstract interface). stream 模块提供了基础的 API .使用这些 API 可以很容易地来构建实现流 ...

  6. 双层for循环用java中的stream流来实现

    //双重for循环for (int i = 0; i < fusRecomConfigDOList.size(); i++) { for (int j = 0; j < fusRecomC ...

  7. java8中的stream流遍历

    比较for循环.迭代器.java8Stream流遍历的不同 package cnom.test.testUtils; import java.io.Serializable; import java. ...

  8. 这可能是史上最好的 Java8 新特性 Stream 流教程

    本文翻译自 https://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/ 作者: @Winterbe 欢迎关注个人微信公众 ...

  9. 【转】Java8 Stream 流详解

      当我第一次阅读 Java8 中的 Stream API 时,说实话,我非常困惑,因为它的名字听起来与 Java I0 框架中的 InputStream 和 OutputStream 非常类似.但是 ...

随机推荐

  1. P5024 [NOIP2018 提高组] 保卫王国

    思路: 首先想到每次询问两个点后就从这两个点开始往上爬,沿路更新 dp 值即可. #include <bits/stdc++.h> #define For(i,a,b) for(int i ...

  2. 以太 ip tcp udp 三次握手的理解

    以太帧: 1.前导码(7字节):使接收器建立比特同步. 2.起始定界符SFD(1字节):指示一帧的开始. 3.目的地址DA(6字节):指出要接收该帧的工作站. 4.源地址SA(6字节):指示发送该帧的 ...

  3. 通过HTML+CSS+Javascript实现向下滚动滚动条出现导航栏并出现回到顶部按钮点击按钮回到顶部(一)

    回到顶部实例一 效果:默认隐藏导航栏,当滚动条滚到超过300px后导航栏和按钮出现,点击回到顶部按钮回到顶部,并隐藏导航栏和按钮(导航栏和按钮都是固定定位) <!doctype html> ...

  4. 面试突击17:HashMap除了死循环还有什么问题?

    面试合集:https://gitee.com/mydb/interview 本篇的这个问题是一个开放性问题,HashMap 除了死循环之外,还有其他什么问题?总体来说 HashMap 的所有" ...

  5. 深度解读SSH免密登录

    深度解读SSH免密登录 我们都知道SSH是LINUX下很常用的命令,用来远程登陆其他的LINUX系统.如果只有一台,那也只是一个密码 ,也到还好.但如果是一个集群,每次都输入密码登录,难免会拉低效率. ...

  6. 【Azure 应用服务】Azure Mobile App (NodeJS) 的服务端部署在App Service for Windows中出现404 Not Found -- The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

    问题描述 使用NodeJS的后端应用,开发一个Mobile App的服务端,手机端通过REST API来访问获取后端数据.在本地编译好后,通过npm start启动项目,访问效果如下: 但是,当把项目 ...

  7. setcontext+orw

    setcontext+orw 大致可以把2.27,2.29做为两个分界点. 我们先来讨论 2.27 及以下的 setcontext + orw 的写法. 首先 setcontext 是什么?了解过 S ...

  8. APP 性能分析工作台——你的最佳桌面端性能分析助手

    目前 MARS-App 性能分析工作台版本为开发者提供Fastbot桌面版的服务. 旨在帮助开发者们更快.更便捷地开启智能测试之旅,成倍提升稳定性测试的效率. 作者:字节跳动终端技术--王凯 背景 F ...

  9. Arrays.sort(arr)是什么排序

    在学习过程中观察到Arrays.sort(arr)算法可以直接进行排序,但不清楚底层的代码逻辑是什么样子,记得自己之前在面试题里面也有面试官问这个问题,只能说研究之后发现还是比较复杂的,并不是网上说的 ...

  10. 「ZJOI2017」树状数组

    「ZJOI2017」树状数组 以下均基于模2意义下,默认\(n,m\)同阶. 熟悉树状数组的应该可以发现,这题其实是求\(l-1\)和\(r\)位置值相同的概率. 显然\(l=1\)的情况需要特盘. ...