# 串流(Stream)的使用 為什麼要使用串流呢? 舉一個常見的例子, 常常發現以下的讀取檔案方式。 把整個檔案讀到記憶體, 再將檔案輸出, 但想一下檔案是10G大小時呢? ``` C# Stream fileStream = File.OpenRead(filePath); // 建立一個跟讀入Stream一樣大的記憶體 // 也就是檔案10G,就要用掉10G的記憶體 byte[] buff = new byte[fileStream.Length]; // 整個檔案讀入到buff fileStream.Read(buff, 0, buff.Length); fileStream.Close(); // buff寫入Response Response.OutputStream.Write(buff, 0, buff.Length); ``` 上面的例子來看, 會直接佔用10G的記憶體, 非常可怕。 所以建議改寫成, 讀一部分,便寫出一部分。 如以下的例子。 ``` C# // Stream是IDisposable using(Stream fileStream = File.OpenRead(filePath)) { // 讀入檔案到buff,buff限制4K大小 byte[] buff = new byte[4096]; int readLength = fileStream.Read(buff, 0, buff.Length); while (readLength > 0) { // 讀入多少byte,即寫出多少byte Response.OutputStream.Write(buff, 0, readLength); readLength = fileStream.Read(buff, 0, buff.Length); } // 最好要加 Response.OutputStream.Flush(); } ``` 待續...... BufferedStream的使用
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up