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();
        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章