3-9 讀寫緩存流 ——BufferedStream類

3-5-3   讀寫緩存流 ——BufferedStream

BufferedStream 就是給另外一流上的讀寫操做添加一個緩衝區。緩衝區是內存中的字節塊,用於緩存數據,從而減小對操做系統的調用次數。所以,緩衝區可提升讀取和寫入性能。使用緩衝區可進行讀取或寫入,但不能同時進行這兩種操做。 BufferedStream Read Write 方法自動維護緩衝區的讀寫過程。
BufferedStream 可寫在某些類型的流周圍。它提供從基礎數據源或儲存庫讀取字節以及將字節寫入基礎數據源或儲存庫的實現。使用 BinaryReader BinaryWriter 讀取和寫入其餘數據類型。 BufferedStream 用於在不須要緩衝區時防止緩衝區下降輸入和輸出速度。若是您讀取和寫入的大小始終大於內部緩衝區的大小,那麼 BufferedStream 可能甚至沒法分配內部緩衝區。
BufferedStream 也在共享緩衝區中緩衝讀取和寫入。假設您幾乎始終執行一系列讀取或寫入操做,而不多在讀取和寫入之間切換。類 BufferedStream 的構造函數有 2 種重載,如表 3 17 所示:
3-17 BufferedStream的經常使用構造函數
名稱
說明
使用默認的緩衝區大小 4096 字節初始化 BufferedStream 類的新實例。
使用指定的緩衝區大小初始化 BufferedStream 類的新實例。

    3-5-4   BufferedStream類案例學習

1. 案例學習:經過緩衝區交換數據

本案例您將學習到:如何經過使用緩存流的來讀寫文件。
u  實驗步驟(1):
由圖 3-15 所示,從工具箱之中拖拽一個 GroupBox text 屬性設置爲「打開文件」;拖拽二個 Label 控件到 GroupBox 上, text 屬性分別設置爲「請選擇源文件名:」、「請填寫備份文件名:」;拖拽二個 TextBox 控件到 GroupBox 上,其中第一 TextBox 控件的 Enabled 屬性爲 false ;拖拽二個 Button 控件到 GroupBox 上, text 屬性分別設置爲「打開文件」、「備份文件」。
3-15  經過緩衝區交換數據界面圖
u  實驗步驟(2):
用鼠標雙擊全部 Button 控件,進入 .cs 文件編輯狀態準備進行開發。代碼加下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
 
namespace FileOptionApplication
{
    public partial class Form16 : Form
    {
        public Form16()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 打開原始文件
        /// </summary>
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openfile = new OpenFileDialog();
            openfile.Filter = "文本文件(*.txt)|*.txt";
            if (openfile.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = openfile.FileName.ToString();
            }
        }
        /// <summary>
        /// 備份目標文件;Stream 和 BufferedStream 的實例
        /// </summary>
        private void button2_Click(object sender, EventArgs e)
        {
            string targetpath = @"c:\" + textBox2.Text + ".txt";
            FileStream fs =File.Create(targetpath);
            fs.Dispose();
            fs.Close();
            string sourcepath = textBox1.Text;
            Stream outputStream= File.OpenWrite(targetpath);
            Stream inputStream = File.OpenRead(sourcepath);
            BufferedStream bufferedInput = new BufferedStream(inputStream);
            BufferedStream bufferedOutput = new BufferedStream(outputStream);
            byte[] buffer = new Byte[4096];
            int bytesRead;
            while ((bytesRead =bufferedInput.Read(buffer, 0,4096)) > 0)
            {
                bufferedOutput.Write(buffer, 0, bytesRead);
            }
            //經過緩衝區進行讀寫
            MessageBox.Show("給定備份的文件已建立", "提示");
            bufferedOutput.Flush();
            bufferedInput.Close();
            bufferedOutput.Close();
            //刷新並關閉 BufferStream
        }
    }
}

3-6  本章小結

n  File 是靜態對象,提供對文件的建立、拷貝、移動和刪除等一系列操做。
n  File.Create( 文件名)能夠建立新的文件,並結合FileStream對象來進行讀寫操做。
n  FileStream BinaryReaderBinaryWriter對象結合起來可對二進制數據進行操做。
n C#中指明文件名的時候,要使用轉義字符「\\」
n  內存流提供沒法調整大小的數據流視圖,並且只能向其寫入。
n  BufferedStream 對象對緩衝區進行讀寫。
 
 
課 後 練 習
1 FileInfo 類和File類的設計差異是什麼?
2 、文本文件操做和圖像文件的操做在本質上有何差別?
3 、在一個WinFORM窗體之中創建一個菜單,命名爲「文件夾」,其子菜單包括「建立文件夾」,「刪除文件夾」,「移動文件夾」,經過點擊這三個文件夾分別實如今「C:\」下面相應的功能。
4 、在本章課後練習 3 的基礎上,再建立一個菜單, 命名爲「文件」,其子菜單包括「建立文本文件」,「刪除文本文件」,分別建立和刪除 練習 3 文件夾中的相關文本文件。
5 、模擬 WINDOWS 操做系統,完整開發一個文本文件編輯器軟件。
相關文章
相關標籤/搜索