c# 流、文件、字符串与byte数组、字符编码

c# 中的流

对象间进行信息或者数据的交换时总是先将对象或数据转换为某种形式的流,再通过流的传输,到达目的对象后再将流转换为对象数据。所以, 可以把流看作是一种数据的载体,通过它可以实现数据交换和传输。

流的特殊性在于它是动态的和线性的,动态是指数据的内容和时间有关,例如,在某个时刻从流中读取到一个数据 ,在下一时刻读取的就不是原来的内容。线性是指每次流只能读取一个字符,不可能一次同时读取两个字符。

流的主要用途就是与应用程序外部的文件或数据源进行数据交互。

比如:访问文件的时,有文件流(FileStream);访问网络的时候时,有网络流(NetworkStream);访问Web服务器的时,HTTPRequest和HTTPRequest类型分别包含了InputStream和OutputStream属性。不管何种类型的流,都继承自基类Stream

流(stream):可以理解为内存中的字节序列。Stream类是所有流的抽象基类,每个具体的存储实体都可以通过名为 **Stream的派生类来实现。如FileStream类就表示“文件”这种存储实体。

对于流有5种基本操作:打开、读取、写入、改变当前位置和关闭

a) 对流读取——将流中的数据读取到具体的数据结构(如数组等)中。

b) 对流写入——把数据结构中的数据写入到流中。

c) 对流查找——对流内的当前位置进行查询和修改。

Stream类的Flush方法和Write方法:

Flush用来清除当前流的所有缓冲区,并把缓冲区中的数据写入到存储设备中。

Write方法向当前流写入字节序列,并将流的当前位置设置为写入字节数。

注意事项:

  1. 流使用后一般是需要关闭的。
  2. 把流中数据加载到内存时要考虑内存溢出等问题。

文件和流

文件是一个由字节组成的有序的命名集合,它具有永久存储。 在处理文件时,你将处理目录路径、磁盘存储、文件和目录名称。

相反,流是一个字节序列,可用于对后备存储进行读取和写入操作,后备存储可以是多个存储媒介之一(例如,磁盘或内存)。 正如存在除磁盘之外的多种后备存储一样,也存在除文件流之外的多种流(如网络、内存和管道流)。

字符串和byte数组

c#中的Byte是一个不可变的值类型,它表示值范围为 [0,255],因此 byte数组就是一整数数组。

字符串和byte数组的互转是通过c#类 System.Text.Encoding 的相关方法实现的。

字符串转换成byte数组:

var byteArray = System.Text.Encoding.UTF8.GetBytes(str);

反之,一个byte数组可以转换成字符串:

var str = System.Text.Encoding.UTF8.GetString(byteArray);

注意,在计算机存储中:

bit 意为“位”或“比特”,是计算机运算的基础;可以表示0或1;
byte 意为“字节”,是计算机文件大小的基本计算单位;
1byte = 8bits ,两者换算是1:8的关系。另外 1 kb = 1024 byte

c#中通过base64对目标字符串编码和解码

base64是一种是种可逆的编码方式,通常可用于对字符串的简单加密。

以下是代码示例,字符编码用UTF-8

var str="Hello!世界。";
//对目标字符串base64编码,将得到一段英文符号组成的字符串(人眼看不出内容是啥)
var base64Str = Convert.ToBase64String(Encoding.UTF8.GetBytes(str));
//对base64编码后的字符串解码,将得到:Hello!世界。
var decodedStr = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(base64Str));

字符编码

前言

全世界很多个国家都在为自己独有的文字编码,并且互不想通,不同的语言字符编码值相同却代表不同的符号。因此,同一份文档,拷贝至不同语言的机器,就可能成了乱码,于是人们就想:

我们能不能定义一个超大的字符集,它可以容纳全世界所有的文字字符,再对它们统一进行编码,让每一个字符都对应一个不同的编码值,从而就不会再有乱码了。这就是Unicode产生的原因……

什么是Unicode,什么是UTF-8,什么是UTF-16

用比较简单的话来说就是,Unicode定义了所有可以用来表示字符的数值集合(称之为Code Point)。UTF-8和UTF-16等UTF标准定义了这些数值和字符的映射关系

ASCII编码是1个字节,而Unicode编码通常是2个字节。Unicode编码转化为“可变长编码”的UTF-8编码。

UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。

参考:https://blog.csdn.net/Deft_MKJing/article/details/79460485


更新于:2023-05-03

posted @   AI大胜  阅读(1038)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
点击右上角即可分享
微信分享提示