C 資料流 檔案流 記憶體流 網路流

2021-08-09 01:14:32 字數 2613 閱讀 9019

c#教程全解

c#程式設計中資料流的使用一直不很熟練,沒有乙個系統的認識,但是它的重要性顯然不言而喻。system.io下的stream類是所有資料流的基類,當我們對資料進行逐字節操作時,首先需要將資料轉換為資料流。c#資料流主要分為三類:filestream、memorystream、networkstream,還有常用的streamreader、streamwriter和textwriter類等。

由名字可以看到這個類主要是對檔案進行操作的。得到filestream物件的常用方式有如下兩種:

filestream fs=new filestream(string path,filemode mode,fileaccess access);//利用建構函式建立,filemode列舉和fileaccess列舉這裡就不總結了。

filestream fs=file.openwrite(@」c:\」);//還有file.open、file.openread、file.opentext都用的很多。

得到filestream物件後,呼叫常見的read和write方法即可進行讀寫,如果要讀寫比1kb位元組大的檔案時可以加個while迴圈來獲得資料。

//寫檔案流

string str = "hh";

byte bytes1 = new

byte[1024];

bytes1 = encoding.utf8.getbytes(str);

filestream fst = new filestream("sd", filemode.openorcreate, fileaccess.write);

fst.write(bytes1, 0, bytes1.length);

//讀檔案流

filestream fs = file.openread("sd");

byte bytes2 = new

byte[1024];

int num = fs.read(bytes2, 0, bytes2.length);

它是以記憶體流的形式對記憶體中的位元組陣列進行操作,支援對資料流的查詢和隨機訪問,和檔案流一樣可以使用position屬性得到記憶體流的當前位置。記憶體流的優點是對長度不定的資料進行快取時,由於記憶體流是可以自動增長的,因此使用很方便。

byte bytes=encoding.utf8.getbytes("hh");

using(memorystream ms=new memorystream())

這個流在網路程式設計裡使用非常普遍。當客戶端程式與伺服器程式進行通訊時資料的接受與傳送就要用到這個類,有一點要特別注意,networkstream類僅僅只支援面向連線的套接字,比如使用tcpclient編寫聊天程式時,只有伺服器與客戶端的tcpclient進行了連線後才能使用networkstream。得到networkstream物件建立好後就可以利用網路流物件進行網路資料的傳遞,但是網路流物件是沒有position物件的,無法指定起始位置來進行讀寫。還有networkstream物件的canseek屬性始終返回false,使用position和seek方法會出現異常。

得到networkstream物件有2種方式,一種是利用socket物件獲得,一種是利用tcpclient物件來獲得,後者我用的非常多。

//寫入資料到緩衝流

networkstream ns = new networkstream(socket);

networkstream ns = tcpclient.getstream();

if (ns.canwrite)

//讀取資料

if (ns.canread)

}

很明顯,在實際程式設計中如果使用位元組陣列來接受或傳送資料太麻煩了,後來從網路程式設計老師那學到了兩個非常好用的類binaryreader類和binarywriter類。我們在實際通訊中使用最多的還是字串通訊,只要得到networkstream物件後,就可以得到字串讀取流和寫入流,比如以下**

tcpclient tcp = new tcpclient();

networkstream networkstream = new networkstream();

binaryreader reader;

binarywriter writer;

string msg = "hh";

networkstream = tcp.getstream();

writer = new binarywriter(networkstream);

writer.write(msg);//寫字串

string str = reader.readstring();//讀字串

還有streamreader類和streamwriter類用的也是比較多,比如讀乙個txt文件讀到末尾,可以呼叫streamreader物件的readtoend方法來拿到這個txt的所有字串內容。另外如果要對傳送的資料進行加密的話,有乙個cryptostream類用起來也挺方便的,在建立這個物件時可以直接就指定採用的對稱加密演算法,比如des加密演算法。解密時也非常方便,只需要使用和加密時相同的金鑰建立cryptostream例項,並在建立例項時指定cryptostreammode為讀模式,即可拿到解密後的資料。

費用流 網路流模版

費用流模版 include include includeusing namespace std const int maxm 100000 最大邊數 const int maxn 1000 最大點數 struct edge edge int a,int b,int c,int d,int e in...

網路流 (網路流問題彙總)

網路 1 有乙個源點 s 和匯點 t 2 每一條有向邊e u,v 都有乙個容量限制記做c e 流 定義在網路弧集上的實值函式 f 滿足三個性質 1 對任意的弧 0 f c e 容量限制。2 f u,v f v,u 反對稱性。3 流守恆性 除源匯點外,其餘頂點都是過度點,流進頂點的流總和等於流出頂點的...

TCP互動資料流 成塊資料流

tcp資料流分類 基於tcp的各類解決方案,可以根據資料吞吐量來大致分成兩大類 1 互動資料型別,例如telnet,ssh,這種型別的協議在大多數情況下只是做小流量的資料交換,比如說按一下鍵盤,回顯一些文字等等。2 資料成塊型別,例如ftp,這種型別的協議要求tcp能盡量的運載資料,把資料的吞吐量做...