文件流FileStream技术出现的理由漫谈
来源:互联网 发布:ipad儿童游戏 知乎 编辑:程序博客网 时间:2024/05/29 02:49
还是废话不多说,一般我们读写文本通过File类中的几个方法是可以满足我们的需求的,如下
File.ReadAllLines("文件路径")
这个方法读取文本的时候是把文本中的每一行数据读取到一个字符串当中,然后就返回一个字符串数组
File.ReadAllText("文件路径");
这个方法读取文本的时候是一次性把文本中的全部数据包括换行符读入到一个字符串当中。我们就可以直接输出
File.ReadAllBytes("文件路径");
这个是按照二进制方法读取出来存入一个二进制数组
写入文本的操作也一样就略
那么问题来了,既然这几个方法可以满足我们文本的读取和写入为什么还要引入FileStream文件流对象
首先我们先谈谈为什么需要这个类;
打个比方,File类可以看成一艘轮船可以把我们的货物全部装上,然后运输到河的对岸。
FileStream类型就可以看成公路上的小货车,假如要把我们的货全部送到目的地,可能需要返回来装很多次。
那么问题很明显,FileStream是把数据拆分成很多小份,慢慢的去运输。回到我们的问题,FileStream每次运输的小份数据会马上完工,使用方可以马上从缓存池拿出来用,File由于量比较大,运输需要时间,使用方只有等待。并且最重要的是,FileStream只需要开小内存存放文本里的数据就可以,而File需要开对应文本那样大的内存去缓存文本内容。
并且FileStream提供了异步读取操作,就是我们在读取的时候还是可以做其他的事,不至于让我们一直在读取文本,不能点击查看UI.
//写文本数据代码 FileStream fs = new FileStream(_Path1, FileMode.Create); string strWord = "同学们大家好,我很牛B啊。"; //字符串转成byte数组 byte[] byteArray = Encoding.UTF8.GetBytes(strWord); fs.Write(byteArray, 0,byteArray.Length); fs.Close();
//定义文件流 FileStream fs = new FileStream(_Path1, FileMode.Open); //开辟内存区域 缓存读出来的文本数据 用于将来显示在控制台里 byte[] byteArray = new byte[1024 * 1024]; //1M空间 //开始读取数据 0表示从缓存内存的第一个字节开始 //count 是我们真正读取到的字节数量 比如我们在文件结尾,可能没有1M的数据给我们读 //这个方法刚好返回的是我们从文本中读取的字节数量 int count = fs.Read(byteArray, 0, byteArray.Length); //开始转码 二进制我们是无法看的 我们需要转成字符串形式 string str = Encoding.UTF8.GetString(byteArray, 0, count); //读取文本操作完成后。我们需要释放一切关于文件流操作申请的计算机资源,不释放的话,操作系统 是不会主动回收的。我们需要自己去释放 fs.Close(); Console.WriteLine(str);
阅读全文
0 0
- 文件流FileStream技术出现的理由漫谈
- c#的FileStream文件流
- FileStream操作文件流的用法总结
- FileStream文件流类
- 文件流类FileStream
- FileStream文件流
- 使用文件流(FileStream)实现大文件的拷贝
- 使用FileStream文件流实现大文件的拷贝
- java FileStream文件流操作
- C# FileStream流文件读写
- C#FileStream文件流(字符)
- 数据流 - 文件流(FileStream)
- 附加有文件流(FileStream)的SQL SERVER数据库文件
- 项目技术选用的理由
- 使用FileStream实现多媒体文件的复制
- U3D 安卓filestream 读写的文件
- C#中FileStream文件流详解
- 使用文件流FileStream复制视频文件
- Elasticsearch段合并情况
- ES集群服务器CPU负载瞬间飚高分析
- Volley传入请求体不成功的解决方案
- 七、构建镜像,搭建镜像仓库
- Error:(58) Error parsing XML: not well-formed (invalid token)
- 文件流FileStream技术出现的理由漫谈
- Linux系统存储设备的管理与磁盘配额
- linux(2)---校园网开热点
- Vuex的自我理解
- 关于javaEE版的eclipse反编译插件的安装与配置
- 最小生成树——Prim算法、Kruskal算法和Boruvka算法
- Linux系统分区方式修改与分区加密
- Vivado下集成逻辑分析仪ILA入门续
- 使用JDBC连接MySQL数据库 用户名密码验证