文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

3-9 读写缓存流 ——Buffered

2023-01-31 05:12

关注

3-5-3  读写缓存流 ——BufferedStream类

类BufferedStream就是给另一流上的读写操作添加一个缓冲区。缓冲区是内存中的字节块,用于缓存数据,从而减少对操作系统的调用次数。因此,缓冲区可提高读取和写入性能。使用缓冲区可进行读取或写入,但不能同时进行这两种操作。BufferedStream 的Read和Write方法自动维护缓冲区的读写过程。
BufferedStream可写在某些类型的流周围。它提供从基础数据源或储存库读取字节以及将字节写入基础数据源或储存库的实现。使用BinaryReader和BinaryWriter读取和写入其他数据类型。BufferedStream用于在不需要缓冲区时防止缓冲区降低输入和输出速度。如果您读取和写入的大小始终大于内部缓冲区的大小,那么BufferedStream可能甚至无法分配内部缓冲区。
BufferedStream也在共享缓冲区中缓冲读取和写入。假设您几乎始终执行一系列读取或写入操作,而很少在读取和写入之间切换。类BufferedStream的构造函数有2种重载,如表3-17所示:
表3-17 类BufferedStream的常用构造函数

名称

说明

BufferedStream (Stream)

使用默认的缓冲区大小 4096 字节初始化 BufferedStream 类的新实例。

BufferedStream (Stream, Int32)

使用指定的缓冲区大小初始化 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 和BinaryReader、BinaryWriter对象结合起来可对二进制数据进行操作。

n在C#中指明文件名的时候,要使用转义字符“\\”。

n 内存流提供无法调整大小的数据流视图,而且只能向其写入。

n BufferedStream对象对缓冲区进行读写。

 

 

课 后 练 习

1、FileInfo类和File类的设计差别是什么?

2、文本文件操作和图像文件的操作在本质上有何差异?

3、在一个WinFORM窗体之中建立一个菜单,命名为“文件夹”,其子菜单包括“创建文件夹”,“删除文件夹”,“移动文件夹”,通过点击这三个文件夹分别实现在“C:\”下面相应的功能。

4、在本章课后练习3的基础上,再创建一个菜单,命名为“文件”,其子菜单包括“创建文本文件”,“删除文本文件”,分别创建和删除练习3文件夹中的相关文本文件。

5、模拟WINDOWS操作系统,完整开发一个文本文件编辑器软件。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯