首页 > 编程语言 >c# 流、文件、字符串与byte数组、字符编码

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

时间:2023-05-03 10:44:36浏览次数:47  
标签:编码 UTF 字节 字符 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

标签:编码,UTF,字节,字符,c#,字符串,byte
From: https://www.cnblogs.com/idasheng/p/17368779.html

相关文章

  • 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(12)- 从SD/eMMC启动
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MXRT1xxx系列MCU的SD/eMMC卡启动。最近在恩智浦官方社区上支持了一个关于i.MXRT从SD卡启动的案例,这让痞子衡想起了一年前写过的一篇《i.MXRT600从SD/eMMC启动》,那一篇重点介绍了基于eMMC设......
  • CS520 计算机架构
    CS520ComputerArchitectureProject4–Spring2023Duedate:5/8/20231.RULES(1)Youareallowedtoworkinagroupofuptotwostudentspergroup,wherebothmembersmusthaveanimportantroleinmakingsureallmembersareworkingtogether.Besides,you......
  • 分布式kv存储系统之etcd集群管理
    etcd简介etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。 官方网站:https://etcd.io/;github地址:https://github.com/etcd-io/etcd;官方硬件......
  • MFC-Pie绘制饼图
     HDChdc=::GetDC(m_hWnd);BOOLb=Pie(hdc,10,10,200,200,130,200,160,10);//绘制饼图/*参数1:HDC参数2和参数3:int限定矩形左上角坐标参数4和参数5:int限定矩形右下角坐标参数6和参数7:int起点坐标参数8和参数9:int终点坐......
  • 监控告警处理之tidb_server_critical_error_total
    作者:Soysauce520背景:**监控面板中tidb\_server\_critical\_error\_total不为0,存在其它数值,表明binlog写入失败,会影响下游系统同步,需要修正。**一、原理分析官方文档binlog.ignor-error介绍**实际使用中,在使用pump、drainer组件往下游同步数据的时候,我们为保护主库运行,把bin......
  • TiCDC 源码解读(5)-- TiCDC DDL 事件处理逻辑 与 Filter 实现介绍
    作者:asddongmen内容概要本文是TiCDC源码解读的第五篇,本文将会介绍TiCDC对DDL的处理方式和Filter功能的实现(基于TiCDCv6.5.0版本代码),文章将会围绕以下4个问题展开。为什么TiCDC只用Owner节点来同步DDL?DDL事件会对同步任务的进度有什么影响?TiCDC是怎么在内......
  • 基于 TiCDC 的 TiDB 复制集群的计划内和计划外切换验证步骤
    作者:pepezzzz环境准备集群名称和版本上游tidb集群:tidb-h下游tidb集群:tidb-cdc版本:v6.5.0CDC专用用户:cdcuser注:业务负载用户应独立于CDC专用用户。业务数据库:cdcdb模拟业务应用:Sysbench、BANK。上下游创建ticdc同步用户和数据库createusercdcuseridentified......
  • PAT Advanced 1005. Spell It Right
    PATAdvanced1005.SpellItRight1.ProblemDescription:Givenanon-negativeinteger \(N\),yourtaskistocomputethesumofallthedigitsof \(N\),andoutputeverydigitofthesuminEnglish.2.InputSpecification:Eachinputfilecontainson......
  • 论文解读《Interpolated Adversarial Training: Achieving robust neural networks wi
    论文信息论文标题:InterpolatedAdversarialTraining:Achievingrobustneuralnetworkswithoutsacrificingtoomuchaccuracy论文作者:AlexLambVikasVermaKenjiKawaguchiAlexanderMatyaskoSavyaKhoslaJuhoKannalaYoshuaBengio论文来源:2022NeuralNetworks论文地址:dow......
  • c#中的特性Atrtribute和反射
    特性(Attribute)特性概述特性即Attribute,网页翻译也叫属性。他在c#代码中是一个类,名称通常为xxxAttribute。用于对程序片段(方法、类、属性)等附加一些额外信息,这些信息可以通过反射被获取,以便做一些逻辑处理。通常与筛选器、AOP等结合使用。官方文档:利用特性扩展元数据|Micr......