C#中數據流(文件流、內存流、網絡流等)相關知識點梳理

基本概念

C#中數據流的應用體現在方方面面,現在針其常用的幾種類進行一次梳理。
數據流包括文件流(FileStream)、內存流(MemoryStream)、網絡流(NetworkStream)以及讀寫流如StreamReader、StreamWriter、BinaryReader和BinaryWriter等。
數據流是什么?
按照定義,數據流是是對串行傳輸數據的一種抽象表示,是對I/O的一種抽象。我們可以通過將文件夾數據、代碼生成結果、設備、內存等各種形式的數據用流的方式進行傳輸。從程序的角度出發,如果將數據從來源取出,可以用StreamReader把數據儲存在內存緩沖區;如果將數據寫入目的地,可以使用StreamWriter把內存緩沖區的數據寫入目標地址。
數據流的操作包括寫、讀,查找,其寫入和讀取操作都是基于字節的。
Stream是一種虛擬類,是所有數據流的基類,無法創建實例。

FileStream

FileStream類主要用于讀寫磁盤文件,其讀寫方法如下所示:

//文件流讀取FileStream fileStream = File.Open(@"D:\Key.txt", FileMode.Open);//初始化待讀取文件流byte[] array = new byte[fileStream.Length];//初始化字節數組,用來存儲讀取到的字節fileStream.Read(array, 0, array.Length);//讀取文件流中數據,寫入到字節數組中fileStream.Close(); //關閉流string str = Encoding.Default.GetString(array);//將字節數組內容轉化為字符串Console.WriteLine(str);//寫文件流byte[] array1 = new byte[1024];array1 = Encoding.UTF8.GetBytes(str);FileStream fileStream1 = new FileStream(@"D:\Key.txt", FileMode.OpenOrCreate, FileAccess.Write);fileStream1.Write(array1, 0, array1.Length);

NetWorkStream

NetWorkStream類是專門用來處理服務器與客戶端通信的流。它在網絡編程中經常使用,主要是用來處理類似Socket、TcpClient和TcpListener這些類中得到的流。

SocketClient = Listener.AcceptSocket();         //等待客戶端的socket
NetStream = new NetworkStream(SocketClient);    //有客戶端連接成功后,創建網絡流
ServerReader = new StreamReader(NetStream);     //讀數據
ServerWriter = new StreamWriter(NetStream);     //寫數據    

MemoryStream

MemoryStream類用于保存數據到內存中并可以直接訪問內存數據。比如說網絡中傳輸數據時可以用流的形式,當我們收到這些流數據時就可以用MemoryStream類來存儲處理。內存流相對于字節數組而言,具有流特有的特性,并且容量可自動增長,在數據加密以及對長度不定的數據進行緩存等場合,使用內存流比較方便。
內存流有多種構造函數,都有不同的作用,但基本都是對內存流容量的定義。

            MemoryStream myStream = new MemoryStream();//將待寫入數據從字符串轉換為字節數組UnicodeEncoding encoder = new UnicodeEncoding();byte[] bytes = encoder.GetBytes("魑魅魍魎);//向內存流中寫入數據for (int i = 0; i < 10; i++){Console.WriteLine("第{0}寫入新數據", i);myStream.Write(bytes, 0, bytes.Length);}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256263.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256263.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256263.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

dns服務 很多問題,后續再研究

慕課網&#xff1a;http://www.imooc.com/video/5220 參考&#xff1a;http://jingyan.baidu.com/article/870c6fc32c028eb03fe4be30.html http://www.tuicool.com/articles/aUNzMfi http://www.07net01.com/linux/dnszhucongfuzhijiquyuchuansong_505144_1373161402.html http…

LINUX下用腳本實現JDK+TOMCAT

這幾天真是累。常常下半夜3點睡覺。是因為這段時間對LINUX下的SHELL編程喜歡上了。 一時弄的忘了睡覺。還好&#xff0c;累沒白累。遍寫了一個JDKTOMCAT的自動安裝&#xff0c;配置的腳本 在這里我把配置出來的成果拿來和大家分享一下。希望有高手來指定一下&#xff0c;我在編…

【圖像處理】——圖像增強Python實現直方圖均衡化

目錄 一、相關概念 1、灰度直方圖概念(hist) 2、灰度概率累積函數(cdf) 3、灰

C#常見編碼方式總結

一、概念 我們知道計算機是基于二進制來表示數據的&#xff0c;那么對于字母和漢字等字符用二進制如何表示&#xff1f; 這就需要用一種編碼方式將這些字母或者符號轉換二進制表示。首先需要對字符集進行編碼表示&#xff0c;每個編碼代表一個固定的字符&#xff0c;然后再將字…

Spring中ApplicationContext加載機制

詳見&#xff1a;http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp33 加載器目前有兩種選擇&#xff1a;ContextLoaderListener和ContextLoaderServlet。 這兩者在功能上完全等同&#xff0c;只是一個是基于Servlet2.3版本中新引入的Listener接口實現&#xff0c;…

Codeforces 724 C. Ray Tracing

Codeforces 724 C. Ray Tracing 題目來源 codeforces 題意&#xff1a; 有一些傳感器按輸入坐標分布在圖上&#xff0c;有一道光從(0,0)沿45角出射&#xff0c;遇到邊按反射法則反射&#xff0c;遇到角落結束。 問每一個點被經過的時間&#xff0c;并按照輸入順序輸出。題解&am…

CDN架構以及原理分析

詳見&#xff1a; http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp61 在不同地域的用戶訪問網站的響應速度存在差異,為了提高用戶訪問的響應速度、優化現有Internet中信息的流動,需要在用戶和服務器間加入中間層CDN. 使用戶能以最快的速度&#xff0c;從最接近用…

基于VS2019的Eigen庫安裝詳解

概念 Eigen是一個C開源線性代數庫&#xff0c;以提供有關矩陣的的線性代數運算&#xff0c;解方程等功能。Eigen在很多領域如信號處理&#xff0c;圖像處理&#xff0c;深度學習等起到重要作用&#xff0c;學習其操作方法&#xff0c;可以靈活的對線性代數、矩陣和矢量將進行計…

【圖像處理】——Python圖像分割邊緣檢測算法之二階梯度算子(laplace、log、dog算子)

目錄 一、二階算子簡介 二、laplace(拉普拉斯算子) 1、什么是拉普拉斯算子

C#中不常見的運算符功能匯總

介紹 C#有很多運算符&#xff0c;可分為以下幾種&#xff1a;算數運算符&#xff0c;比較運算符&#xff0c;條件運算符&#xff0c;賦值運算符&#xff0c;邏輯運算符。下面對不常見的運算符進行匯總。 概念 條件運算符 ?(可空類型修飾符) 引用類型可以使用空引用表示一…

SQL Server2012中如何通過bak文件還原SQL Server2012數據庫

1 登陸完數據庫后&#xff0c;不要新建數據庫&#xff0c;直接點擊“數據庫”然后右擊"還原數據庫"。 2 在"源"選項中選擇"設備"。 3 選擇相應的bak文件并進行添加。 4 添加完之后點擊確定&#xff0c;注意在目標這一欄中數據庫名稱都可以不用寫…

【圖像處理】——Python OpenCV實現形態學膨脹、腐蝕開閉操作(可以用于圖像濾波、圖像分割等)

轉載博客請注明詳細地址,謝謝本文講了形態學基本操作膨脹腐蝕開閉操作的原理本文講解了用OpenCV-Python實現形態學操作目錄 一、形態學簡述 1、簡介 2、一些基本定義 3、結構元素

thrift服務windows環境編譯失敗

為什么80%的碼農都做不了架構師&#xff1f;>>> 修改maven的pom文件 <!--thrift服務 api 層&#xff0c;開發時 windows系統需指定exe程序位置--> <properties> <thrift.exe.path>E:/Thrift/thrift-0.9.3.exe</thrift.exe.path&g…

編譯包含Google Play服務App的SDK版本問題

編譯包含Google Play服務App的SDK版本問題 錯誤信息&#xff1a;No Resouce identifier found for attribute ‘touchscreen BlocksFocus’ in package ‘android’這個錯誤通常是App引用了Google Play時候發生。Xamarin編譯該類App&#xff0c;需要目標SDK版本必須是21或者更高…

《第一行代碼》學習筆記35-服務Service(2)

1.Android的UI線程不安全&#xff0c;想要更新應用程序里的UI元素&#xff0c;則須在主線程中進行&#xff0c;否則會出現異常。 2.Android不允許在子線程里進行UI操作&#xff0c;對于該情況&#xff0c;Android提供了一套異步消息處理機制&#xff0c;完美解決在子線程中進行…

C#中HP-Socket通信組件詳解

概念 HP-Socket 是國產的TCP、UDP和HTTP 通信框架&#xff0c;包含服務端、客戶端和 Agent 組件&#xff0c;提供 C/C、C#、Java、Python 等多種編程語言接口。 與傳統TCP通訊區別的是HP-Socket 對通信層做到了完全封裝&#xff0c;程序不必關注通信層的任何細節&#xff1b;H…

mail發送的內容顯示為附件的解決辦法

利用命令: cat data.mail | mail -v -s "mail test" xxxqq.com 發送的內容在收件箱中顯示為附件tcmimi.xxx.bin. 這是因為mail期望文件輸入的是unix格式的文本,也就是說換行符使用\n而不是\r\n,如果文本中包含\r(使用set list,顯示為^M),這種情況下mail會認為該文件…

【圖像處理】——Python+opencv實現二值圖像的輪廓邊界跟蹤以及輪廓面積周長的求解(findcontours函數和contourArea函數)

目錄 一、函數 cv.findContours 二、輪廓層級(返回參數hierarchy) 三、輪廓尋找方式 1. RETR_LIST 2. RETR_TREE

基于C#的ico圖標制作與應用

一、簡介 ICO是什么 ICO 是 Windows 開發的一種圖標格式&#xff0c;是一種可以存儲多張圖案、多尺寸、多色板的圖標文件。 一般用IcoFX軟件來創建或修改ico文件。 點擊下載 Ico文件創建與應用 1.單擊打開按鈕&#xff0c;選擇一個圖像文件&#xff0c;確定后一般出現以下…

第5章--高級數據管理

5.1 數值和字符處理函數 常用的數學函數 統計函數 例子&#xff1a; > x <- c(1,2,3,4,5,6,7,8) > mean(x) [1] 4.5 > sd(x) [1] 2.44949 默認情況下&#xff0c;函數scale()對矩陣或數據框的指定列進行均值為0、標準差為1的標準化&#xff1a; newdata <- scal…