.net 流(Stream) - 文件流、內存流、網絡流

轉自:http://www.oseye.net/user/kevin/blog/85數組

1、文件流 FileStream緩存

FileStream流繼承與Stream類,一個FileStream類的實例實際上表明一個文件流,使用FileStream類能夠對文件系統上是文件進行讀取、寫入、打開和關閉操做。網絡

建立FileStream實例ide

一、.Net提供多種獲取FileStream對象的方法,其中構造函數就有10多種,咱們看下典型的構造函數順便講解下參數含義:函數

  1. public FileStream(string path, FileMode mode, FileAccess access);

參數說明:
path指明文件所在的路徑信息;
mode是FileMode的枚舉值,表示文件打開或建立的方式,含義以下:加密

  • CreateNew:指定操做系統應建立新文件,若是文件已經存在,則引起IOException;
  • Create:指定操做系統應建立新文件,若是文件已經存在,它將被覆蓋;
  • Open:指定操做系統應打開現有文件,若是文件不存在,則引起FileNotFoundException;
  • OpenOrCreate:指定操做系統應打開文件,若是文件不存在,則建立新文件;
  • Truncate:指定操做系統應打開現有文件,文件一旦打開,就將截斷爲零字節大小;
  • Append:打開先有文件並把Position設置至文件尾,若是文件不存在將建立新文件。Append只能同FileAccess.Write一塊兒使用;

access是FileAccess的枚舉值,它控制對文件的訪問權限,含義以下:spa

  • Read:打開文件用於只讀;
  • Write:打開文件用於只寫;
  • ReadWrite:打開文件,用於讀寫;

二、除了FileStream類自己提供的構造函數外,System.IO命名空間下的File和FileInfo類也提供了建立FileStream對象的方法。其中OpenRead方法返回只讀文件流,OpenWrite方法返回只寫文件流。如:操作系統

FileStream fs=File.OpenRead(@"c:\file.txt");

 

FileStream的讀寫方法:.net

public override int Read(
byte[] array, //內存緩衝區,儲存從文件流中讀取的數據
int offset, //array開始寫入數據的下標值
int count //從文件流中讀取的字節大小
);
public override void Write(
byte[] array, //內存緩衝區,存儲了要寫入流的字節數據
int offset, // 從array的下標值開始取數據
int count //要寫入的字節數
);

 

FileStream實例 code

try
{
  //寫入
  FileStream fileStream = new FileStream(@"d:\test.txt", FileMode.OpenOrCreate);
  byte[] content = Encoding.UTF8.GetBytes("我愛我家");
  fileStream.Write(content, 0, content.Length);
  fileStream.Position = 0; //設置當前位置
  content = Encoding.UTF8.GetBytes("我愛你家");
 
  fileStream.Write(content, 0, content.Length);
  fileStream.Close();
 
  //讀取
  fileStream = new FileStream(@"d:\test.txt", FileMode.Open);
  content = new byte[fileStream.Length];
  fileStream.Read(content, 0, content.Length);
  Console.WriteLine(Encoding.UTF8.GetString(content));
}
catch (Exception ex)
{
  Console.WriteLine(ex.Message);
}

 


2、內存流 MemoryStream

和文件流不一樣,MemoryStream類表示的是保存在內存中的數據流,由內存流封裝的數據能夠在內存中直接訪問。內存通常用於暫時緩存數據以下降應用程序對臨時緩衝區和臨時文件的須要。

既然字節數據也在內存中存儲,爲何還要引入內存流的概念呢?這是由於內存流和字節數組雖然都位於程序緩衝區,可是具備不一樣特性。內存流相對於字節數組而言,具備流特有的特性,而且容量可自動增加,在數據加密以及對長度不定的數據進行緩存等場合,使用內存流比較方便。

建立MemoryStream實例

MemoryStream有多種構造函數,部分舉例以下:

  • public MemoryStream();該構造函數初始分配的容量大小爲0,隨着數據的不斷寫入,其容量能夠不斷地自動擴展。
  • public MemoryStream(byte[] buffer);根據字節數組buffer初始化,實例的容量大小規定爲字節數組的長度。
  • public MemoryStream(int capacity);容量固定爲capacity。

MemoryStream實例

MemoryStream mem = new MemoryStream();
Console.WriteLine("初始分配的容量:"+mem.Capacity+" 初始使用量:"+mem.Length);
byte[] content = Encoding.UTF8.GetBytes("我愛我家");
mem.Write(content, 0, content.Length);
Console.WriteLine("初始分配的容量:" + mem.Capacity + " 初始使用量:" + mem.Length);

3、網絡流NetWorkStream

網絡流的意思是數據在網絡的各個位置之間是以連續的字節形式傳輸的,NetWorkStream只能用於面向鏈接的套接字。

對於NetWorkStream流,寫入操做是指歷來源端內存緩衝區到網絡上的數據傳輸;讀取操做是從網絡上到接收端內存緩衝區的數據傳輸。

如需對NetWorkStream深刻了解,請查閱相關資料。

相關文章
相關標籤/搜索