C#的字节与流

计算机中文件有很多种,我们知道实际存在计算机中的都是二进制。这里我记录了通过流对文件的读取操作。

首先在这里简单涉及下位,字节,字符的概念。

位(bit)可以表示0或1,

字节(byte)由8位组成(bit),可以表示0-255,256个不同的数据。

字符,字符根据编码的不同有所区别。

ANSI编码(本地化),它是支持本地的编码方式,不同 ANSI 编码之间互不兼容。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。对于字符来说ANSI以单字节存放英文字符,以双字节存放中文等字符。

Unicoide编码,Unicode下,英文和中文的字符都以双字节存放。用来给 UNICODE 字符集编码的标准有很多种,比如:UTF-8, UTF-7, UTF-16, UnicodeLittle, UnicodeBig 等。

UTF-8时表示一个字符是可变的,有可能是用一个字节表示一个字符,也可能是两个,三个.当然最多不能超过3个字节了.反正是根据字符对应的数字大小来确定.

UTF-16任何字符对应的数字都用两个字节来保存。

C# Stream流的主要用途就是与应用程序外部的文件或者数据源进行数据交互。有文件流FileStream,网络流NetwrokStream,访问网络时InputStream,OutputStream等。流的内部就是对二进制数据的读取。

流可以一次性读取,也可以循环读取。

一次性读取:

 public void Read()
        {
            string filePath = Environment.CurrentDirectory + "/content.txt";
            Stream source = new FileStream(filePath, FileMode.Open, FileAccess.Read);

            byte[] buffer = new byte[source.Length];
            int bytesRead = source.Read(buffer, 0, (int)source.Length);

            Output(buffer);
            
        }
循环读取:

 public void ReadLoop()
        {
            string filePath = Environment.CurrentDirectory + "/content.txt";
            string fileDest = Environment.CurrentDirectory + "/dest.txt";
            Stream source = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            Stream destStream = new FileStream(fileDest, FileMode.Create, FileAccess.Write);

            int bufferSize = 10;
            byte[] buffer = new byte[bufferSize];
            int bytesREad;
            do
            {
                bytesREad = source.Read(buffer, 0, bufferSize);
                destStream.Write(buffer, 0, bufferSize);
            }
            while (bytesREad > 0);

            source.Dispose();
            destStream.Dispose();
        }
StreamReader, StreamWriter。StringReader, StringWriter。他们是流的包装器类,方便对流的读取。以下是示例代码

public void StreamReaderRead()
        {
            string filePath = Environment.CurrentDirectory + "/content.txt";
            Stream source = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            StreamReader sr = new StreamReader(source);//Stream包装器类
            string text = sr.ReadToEnd();

            Console.Write(text);
        }

 public void StreamWriterWrite()
        {
            string filePath = Environment.CurrentDirectory + "/content.txt";
            string fileDest = Environment.CurrentDirectory + "/dest1.txt";
            
            Stream source = new FileStream(filePath, FileMode.Open, FileAccess.Read);

            StreamReader sr = new StreamReader(source);//Stream包装器类
            string text = sr.ReadToEnd();

            StreamWriter sw = new StreamWriter(fileDest);//Stream包装器类
            sw.Write(text);
            sw.Flush();
            sw.Close();
        }

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值