日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

【转】C# 数据流详解(FileStream、MemoryStream、NetworkStream等类)

發布時間:2023/12/10 C# 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】C# 数据流详解(FileStream、MemoryStream、NetworkStream等类) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文章內容主要為數據流及相關輔助類:

流(Stream)、文件流(FileStream)、內存流(MemoryStream)、網絡流(NetworkStream)、加密流(CryptoStream)以及文本讀寫的StreamReader、StreamWriter、用于二進制讀寫的BinaryReader和BinaryWriter類等。

對FileStream、MemoryStream、NetworkStream有一定的了解即可,重點熟練StreaReader、StreamWriter、BinaryReader和BinaryWirter即可。

目錄

數據流

數據流的操作

分類

Stream

FileStream

MemoryStream

NetworkStream

CryptoStream

StreamReader

StreamWriter

BinaryReader

BinaryWirter


數據流

數據流(data stream)是一組有序,有起點和終點的字節的數據序列。在C#里,數據流提供了一種通用的方式和字節隊列進行交互。

數據流的操作

  • 逐字節順序寫入(將數據從內存緩沖傳出到外部資源)
  • 逐字節順序讀取(將數據從外部數據資源傳輸到內存緩沖區)
  • 隨機讀寫(從某個位置開始逐字順序讀寫)

分類

  • 根據數據源的類型(C#語言采用這種方式進行分類)

分為文件流(FileStream)、內存流(MemoryStream)、網絡流(NetworkStream)、加密流(CryptoStream)。

  • 根據讀寫數據的類型

分為字節流和字符流

  • 根據輸入輸出方向

輸入流和輸出流

Stream

流,在System.IO命名空間下,是所有數據流的基類,抽象類無法創建實例。

Position:獲取或設置流當前的位置

Length:以字節為單位流的長度

CanWriter:當前流是否支持寫入

CanTimeout:當前流是否超時

CanSeek:當前流是否支持查找,當CanSeek為false的時候,是不允許使用Position屬性和調用Seek函數的,會拋出異常。

CanRead:當前流是否可讀

Synckronized:根據當前流創建一個線程安全的的流對象

Close:關閉流并釋放相關資源。

FileStream

文件流,在System.IO命名空間下,用于對各種類型的文件進行讀寫。

必須調用Dispose進行資源釋放。

創建FileStream:FileStream構造函數之外,也可以通過File.OpenWrite和File.OpenRead創建FileStream對象

Flush:清除流的緩沖區,將已經緩沖的數據寫入文件中。

Lock:鎖定當前流,防止其他進程對文件進行讀寫。

UnLock:解除鎖定,允許其他進程對文件進行讀寫。

SetLength:設置流的長度。

Read:讀取一個一個字節塊,并寫入給定的緩沖區,offset是數組的偏移量,coun為讀取的字節長度。每當讀取一個字節后Position會增加1。放返回值為每次讀取到的實際字節數。

Seek:設置流的偏移量,offset 偏移量,origin是指定偏移量的參考位置,開始位置、結束位置、當前位置。

MemoryStream

內存流,在System.IO命名空間下,對保存在內存中的字節數組進行操作。由于內存流的容量可以自動增長,因此在數據加密以及對長度不定的數據進行緩存等場合使用。

Capacity:獲取或設置為此流分配的字節數

GetBuffer:獲取流中的無符號字節數組,返回的是分配給流空間大小的字節數組(也就是Capacity大小的字節數組),而不是實際占用了的字節數組。

NetworkStream

網絡流,在System.Net.Sockets命名空間下,利用該類可以通過網絡發送或接收數據。可以將NetworkStream看作在數據源和接收端之間架設了一個數據通道,讀取和寫入就可以針對通道來進行。

NetworkStream僅支持面向連接的套接字,也就是采用TCP協議的連接。

創建NetworkStream:構造函數參數為Socket對象或調用TcpClient對象GetStream方法得到NetworkStream

Position:網絡流無法訪問該屬性會拋出異常

CanSeek:始終返回false

Seek:網絡流無法調用該函數會拋出異常。

DataAvailable:查看緩沖區(數據緩沖區)中是否有數據等待讀出。

Write:將字節數組從進程緩沖區寫入到TCP發送緩沖區,Write為同步方法,會阻塞線程直到發送成功或返回異常位置。

Read:將字節數組從TCP接收緩沖區讀出到進程緩沖區,調用Read之前應先判斷DataAvailable屬性是否為true。

CryptoStream

加密流,在System.Security.Cryptography命名空間下,該類可加密流的方式加密或者解密數據,而且只能用于對稱加密。

實現任何CryptoStream的任何被加密對象都可以和實現Stream的任何對象鏈接起來,因此一個對象的流式處理輸出可以饋送到另一個對象的輸入,而不需要分別存儲中間結果。

Read:將需要解密的流寫入到字節數組中,字節數組是已經解密的。

Write:將需要進行加密的流寫入到字節數組中,字節數組中的數據是已經被加密的。

FlushFinalBlock:將內部緩沖區的數據進行寫入并清空緩沖區。調用Flush無效。

StreamReader

繼承自TextReader,在System.IO命名空間下。對文本數據進行讀取操作時使用該類。

創建StreamReader:構造函數,參數使用FileStream、NetworkStream、MemoryStream的對象或使用文件路徑。

Close:讀寫完成后必須使用CLose進行流的關閉.

BaseStream:獲取對應的底層流,也就是創建StreamWriter或StreamReader時使用的Stream對象。

CurrentEncoding:獲取當前流設置的編碼格式。

ReadToEnd:從底層流的Position開始讀取字符到結束為止

EndOfStream:獲取底層流的Position是否為末尾為止。

StreamWriter

繼承自TextWriter,在System.IO命名空間下。對文本數據進行寫入操作時使用該類。

創建StreamWriter:除構造函數外,調用File.CreateText、FileInfo.CreateText均可以獲取StreamWriter對象。

AutoFlush:是否在調用Write函數后自動調用Flush函數將字符緩沖到底層流。

Flush:清除當前寫入器的所有緩沖區,并使任何已緩存的數據變寫入底層流。

BinaryReader

在System.IO命名空間下,對圖像文件、壓縮文件等二進制數據進行讀取操作時使用該類。

BinaryWirter

在System.IO命名空間下,對圖像文件、壓縮文件等二進制數據進行寫入操作時使用該類。

總結

以上是生活随笔為你收集整理的【转】C# 数据流详解(FileStream、MemoryStream、NetworkStream等类)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。