以前的文章: Stream 基础和常用 和 IO 常用.
这篇主要是做一个整理, 方便要用的时候 warm up.
先过一边基本术语和概念:
Bits 就是比特. 它是最小的单位, 1 bit = 1 个二进制, 0 或者 1.
通信的时候就是通过电压高低, 来表示 0 或 1. 在由二进制来表达万物 (就好比摩斯密码一样啦)
Bytes 是字节. 1 byte = 8 bits. 它也是一个单位.
Stream 是流的概念. 如果 bytes 是鱼, 那么 stream 就是河流. 通信的时候就好像建立了河流. 然后上面有很多鱼游来游去.
通信用的是二进制, 那自然是需要 encode 咯, 比如把 0 和 1 变成 alphabet (英文字母).
1 个 alphabet 需要 1 byte 来表示, 而汉字需要 2 bytes 来表示 (也要 依据 encode 手法, 但大概可以这样去理解).
还有很多种 encode 的方式, 比如: ASCII, Unicode, UTF, Base64
char 是 C# 中用来装字母的, 1 char = 2 bytes, 所以它也可以撞汉字.
char[] 就是很多字母咯.
string 是 char[] 的封装. 它包含了对 char[] 的操作, 比如 char[] 的 length 是不可以变的, 但 string 可以.
ASP.NET Core build-in 了许多 Class 来处理 Bytes, Stream 这些冬冬.
Stream(抽象类) > TextReader(抽象类) > StreamReader(实体类) > MemoryStream(实体类), FileStream(实体类) 等等
顾名思义, MemoryStream 是负责缓存的, FileStream 是文件的.
在数码世界里, 万物都是二进制 (bits) 0 或 1 来表示的, 1 个文件它储存在磁盘里就是二进制, 2 台电脑通信传输的依然是二进制.
这个是最底层的逻辑.
0 和 1 对电脑来说 ok, 对人来说可不行, 所以需要转换. 二进制转换成英文字母, 汉字是有规范的, 这就是所谓的 ASCII, Unicode, UTF, 等等.
假设, 系统的需求是让用户输入一段字母, 然后生成 1 个 word.txt 文件.
当获取到 user input (string), 先把它转换成 bytes. 然后创建文件, 并把 bytes 写进去.
在开发种我们需要掌握好, encode (清楚如何 decode/encode bytes), file type (文件的类型), 读写 stream 的 bytes.