91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中的流怎么使用和分類

發布時間:2022-08-01 09:22:07 來源:億速云 閱讀:191 作者:iii 欄目:開發技術

這篇“C#中的流怎么使用和分類”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“C#中的流怎么使用和分類”文章吧。

使用流讀取、寫入文件

使用流把文件讀取到字節數組:

//FileMode.Create, FileMode.Append 
//FileAccess.Write, FileAccess.ReadWrite 
//FileMode和FileAccess搭配使用,如果第二個參數FileMode.Appden寫追加,第三個參數FileAccess.Read只讀,會拋異常 
Stream source = new FileStream(@"1.jpg",FileMode.Open, FileAccess.Read) 
byte[] buffer = new byte[source.Length]; 
int bytesRead = source.Read(buffer, i, (int)source.Length);

Int32類型的最大值,以及Byte, KB, MB, GB轉換:

Int32.MaxValue = 2147483647 Byte 
2147483647/1024 = 2097152 KB(1 KB = 1024 Byte) 
2097152/1024 = 2048 MB(1 M = 1024 KB) 
2048/1024 = 2 G(1G = 1024M)

使用流把字節數組寫到文件:

Stream target = new FileStream(@"2.jpg", FileMode.Create, FileAccess.Write);
 
Stream source = new FileStream(@"1.jpg",FileMode.Open, FileAccess.Read) 
byte[] buffer = new byte[source.Length]; 
int bytesRead = source.Read(buffer, i, (int)source.Length);
 
target.Write(buffer, 0, buffer.Length); 
source.Dispose(); 
target.Dispose();

使用流對大文件進行分批讀取和寫入:

int BufferSize = 10240; // 10KB 
Stream source = new FileStream(@"D:\a.mp3", FileMode.Open, FileAccess.Read); 
Stream target = new FileStream(@"D:\b.mp3", FileMode.Create, FileAccess.Write);
 
byte[] buffer = new byte[BufferSize]; 
int byteRead; 
do{ 
    byteRead = source.Read(buffer, 0, BufferSize); 
    target.Write(buffer, 0, bytesRead); 
} while(byteRead > 0); 
target.Dispose(); 
source.Dispose();

流的分類

在Stream抽象類下包含:
→FileStream→IsolatedStoreageFileStream
→MemoryStream
→NetworkStream

基礎流

從流中讀取數據:

CanRead()
Read(byte[] buffer, int offset, int count)

向流中寫入數據:

CanWrite()
Write(byte[] buffer, int offset, int count)
WriteByte(Byte value)

移動流指針:

CanSeek()
Seek(long offset, SeekOrigion)
Position流的指針位置
Close()
Dispose()
Flush()將緩存設備寫入存儲設備
CanTimeout()
ReadTimeout()
WriteTimeout()
Length
SetLength(long value)

裝飾器流

實現了Decorator模式,包含對Stream抽象基類的引用,同時繼承自Stream抽象基類。

  • System.IO.Compression下的DeflateStream和GZipStream用于壓縮和解壓縮

  • System.Security.Cryptography下的CryptoStream用于加密和解密

  • System.Net.Security下的AuthenticatedStream用于安全性

  • System.IO下的BufferedStream用戶緩存

包裝器類

不是流類型,而是協助開發者處理流包含的數據,并且不需要將流讀取到Byte[]字節數組中。但流的包裝器類包含了對流的引用。

StreamReader

繼承自TextReader。
將流中的數據讀取為字符。

FileStream fs = new FileStream("a.txt", FileMode.Open, FileAcess.Read); 
StreamReader reader = new StreamReader(fs, Encoding.GetEncoding("GB2312"));
 
//或者 
//StreamReader reader = new StreamReader("a.txt"); //默認采用UTF-8編碼方式
StreamWriter

繼承自TextWriter。
將字符寫入到流中。

string text = 
@"aa 
bb 
cc";
 
StringReader reader = new StringReader(text); 
int c = reader.Read(); 
Console.Write((char)c);
 
char[] buffer = new char[8]; 
reader.Read(buffer, 0, buffer.Length); 
Console.Write(String.Join("",buffer));
 
string line = reader.ReadLine(); 
Console.WriteLine(line);
 
string rest = reader.ReadToEnd(); 
Console.Write(); 
reader.Dispose();
StringReader和StringWriter

也繼承自TextReader和TextWriter,但是用來處理字符串。

BinaryWriter和BinaryReader

BinaryWriter用于向流中以二進制方式寫入基元類型,比如int, float, char, string等.BinaryReader用于從流中讀取基元類型。注意,這2個類并不是繼承TextReader和TextWriter。

namespace ConsoleApplication29 
{ 
    class Program 
    { 
        static void Main(string[] args) 
        { 
            Product p = new Product("product.bin") 
            { 
                Id = 1, 
                Name = "GOOD", 
                Price = 500F 
            }; 
            p.Save();
 
            Product newP = new Product("product.bin"); 
            newP.Load(); 
            Console.WriteLine(newP); 
            Console.ReadKey(); 
        } 
    }
 
    public class Product 
    { 
        public int Id { get; set; } 
        public string Name { get; set; } 
        public double Price { get; set; }
 
        private string filePath;
 
        public Product(string filePath) 
        { 
            this.filePath = filePath; 
        }
 
        public void Save() 
        { 
            FileStream fs = new FileStream(this.filePath, FileMode.Create,FileAccess.Write); 
            BinaryWriter writer = new BinaryWriter(fs); 
            writer.Write(this.Id); 
            writer.Write(this.Name); 
            writer.Write(this.Price); 
            writer.Dispose(); 
        }
 
        public void Load() 
        { 
            FileStream fs = new FileStream(this.filePath, FileMode.Open,FileAccess.Read); 
            BinaryReader reader = new BinaryReader(fs); 
            this.Id = reader.ReadInt32(); 
            this.Name = reader.ReadString(); 
            this.Price = reader.ReadDouble(); 
            reader.Dispose(); 
        }
 
        public override string ToString() 
        { 
            return String.Format("Id:{0},Name:{1},Price:{2}", this.Id, this.Name, this.Price); 
        } 
    } 
}

結果:

C#中的流怎么使用和分類

編碼方式:
定義了字節如何轉換成人類可讀的字符或者文本,可以看作是字節和字符的對應關系表。在讀取文件采用的編碼方式要和創建文件采用的編碼方式保持一致。

幫助類

在System.IO命名空間下。

  • File

FileStream fs = File.Create("a.txt");
Open(string path, FileMode mode)
OpenRead()
OpenWrite()
ReadAllText()
ReadAllByte()
WriteBllBytes()
WriteAllLines()
Copy(string sourceFileName, string destFileName)

  • FileInfo

  • Path

  • Directory

  • DirectoryInfo

以上就是關于“C#中的流怎么使用和分類”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安图县| 海丰县| 内丘县| 三台县| 张家界市| 保靖县| 信阳市| 辽中县| 平陆县| 青岛市| 山丹县| 乌审旗| 济宁市| 长治市| 鄱阳县| 无棣县| 桑日县| 资溪县| 定安县| 苗栗县| 临猗县| 苏州市| 上林县| 田林县| 桑植县| 望城县| 浦城县| 奉新县| 郓城县| 泰州市| 福安市| 二手房| 阿克苏市| 浪卡子县| 贞丰县| 洛阳市| 贡山| 龙门县| 台湾省| 江门市| 哈巴河县|