Stream 基础和常用
更新 : 2018-08-05
File 和 FileInfo 的区别
其实都是一样的,唯一不同只是说 File 适合用于对一个文件单次操作.
而 FileInfo 比较适合对一个文件多次操作.
FileStream 则是对文件的读写, 通过 File.Open, File.Create 我们可以获取到 file stream 然后就可以读写了.
来源 : http://www.cnblogs.com/jimmyzheng/archive/2012/03/17/2402814.html 系列
目前只作为个人参考.
微软的 stream 结构
老大是 Stream(抽象类) -> TextReader(抽象类) -> StreamReader(实体类) -> MemoryStream(实体类),FileStream...等等
第4层比较具体了,比较是针对性的类了
basic :
1 bit ( 1个2进制 )
8 bit = 1 byte ( 8个2进制 = 1字节 )
stream (流,流里面有多个字节)
英文字母是一个字节,汉字是2个字节 (也要base on Encode手法)
char 是字符类型 . on c# 1 char = 2字节 (代表一个字符)
表示多个字符用 char[] 数组, String 则是微软封装的一个上层, 对char的简单控制。
String 里面装了 char[], char的length是不可以改变的, 但是string可以
stream 的 read write 逻辑 :
调整好 stream 的 position
write(buffer,offset,length) 参数一是一个你要写入进去stream的一组字节, offset是针对stream position做偏移, length 是你要写入多少.
read (buffer,offset,length) 和上面的一样,只不过这次的buffer应该是一个空的,read了会把stream中的字节放入到buffer中.
常用 :
byte[] buffer = null;
string testString = "Stream!Hello world 我";
buffer = Encoding.UTF8.GetBytes(testString); //string to byte (汉字算2字节哦,当然也要考虑的你的encode手法 UTF8,Unicode,ASCII的不同都可能影响字节数)
using (MemoryStream stream = new MemoryStream())
{
//最需要注意的是 position, read write 会auto调整position的, 所以养成好习惯,每次自己控制检查
//设置position的方法有 :
stream.Seek(, SeekOrigin.Begin); //参数1 : offset
stream.Position = ;
stream.Write(buffer, , buffer.Length); //在写入的时候也是可以设置offset, but position 就不可以设置了。
buffer = new byte[stream.Length];
stream.Position = ;
long readHowMuch = stream.Read(buffer, , buffer.Length); //可以知道最终read了多少 (比如我们说要read 100, 结果里面只有30, 那么最终就是30了)
string result = Encoding.UTF8.GetString(buffer, , buffer.Length); //byte to string
}
//简单的readToEnd
string filePath = Server.MapPath(@"~\temp\stream\text.txt");
using (FileStream stream = File.OpenRead(filePath)) //直接打开, 文件不在会error
{
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8, false)) //告诉它是什么encode,就强转了, 参数3 : 是否用智能判断encode
{
string x = reader.ReadToEnd();
}
}
Stream 基础和常用的更多相关文章
- Java SE 基础:常用关键字
Java SE 基础:常用关键字 常用关键字表
- html5基础的常用的技巧
html5基础的常用的技巧 1. 新的Doctype声明 XHTML的声明太长了,我相信很少会有前端开发人员能手写出这个Doctype声明. <!DOCTYPE html PUBLIC &quo ...
- Android 基础:常用布局 介绍 & 使用(附 属性查询)
Android 基础:常用布局 介绍 & 使用(附 属性查询) 前言 在 Android开发中,绘制UI时常需各种布局 今天,我将全面介绍Android开发中最常用的五大布局 含 Andr ...
- python基础(常用内容)
python基础(常用内容) 机器数: 一个数在计算机中的二进制表示形式就是机器数. 例如: +3用机器数表示就用<00000011>表示 -3用机器数表示就用<10000011&g ...
- 十八. Python基础(18)常用模块
十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...
- Linux基础之常用基本命令备忘
Linux基础之常用基本命令备忘 PWD 查询当前所在Linux上的位置 / 根目录 CD(change directory)切换目录 语法 CD /(注意添加空格) LS ...
- Linux - nginx基础及常用操作
目录 Linux - nginx基础及常用操作 Tengine淘宝nginx安装流程 nginx的主配置文件nginx.conf 基于域名的多虚拟主机实战 nginx的访问日志功能 网站的404页面优 ...
- Redis基础类型常用操作命令
Redis基础类型常用操作命令 概念:Redis是用C语言开发的一个开源的高性能键值对数据库. 特征: 数据间没有必然的联系 内部采用单线程机制进行工作 高性能 多数据类型支持 字符串类型 Strin ...
- HTML&CSS基础-html常用的标签
HTML&CSS基础-html常用的标签 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.html的源代码 <!DOCTYPE html> <html& ...
随机推荐
- 微信/易信公共平台开发(二):自定义菜单的PHP实现(提供源码)
微信把公众号分成订阅号和服务号两种,服务号可以自定义菜单, 菜单大大方便了用户操作. 比如:公众服务号 "中国南方航空" 的自定义菜单如下图: 点菜单就可以直接进入操作了,方便! ...
- AngularJS - 基本功能介绍
转载自:http://www.cnblogs.com/powertoolsteam/p/angularjs-introdection.html (写得很好的Angular入门,可以试试) Angula ...
- 新版福昕阅读器(Foxit Reader)启动速度慢解决办法
新版福昕阅读器(FoxitReader)启动速度慢解决办法之前喜欢使用福昕阅读器的原因就是看中了其小巧,可是最近版本的阅读器打开速度变得慢了很多(不是电脑配置问题),比AdobeReader还要慢,这 ...
- how to get file from classpath using jboss7.x.1 --reference
question: I want to convert smooks xml-java, so that i need to load source file from mobeeadmin.war/ ...
- [转] Java内部类之闭包(closure)与回调(callback)
闭包(closure)是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域.通过这个定义,可以看出内部类是面向对象的闭包,因为它 不仅包含外围类对象(创建内部类的作用域)的信息,还自动拥 ...
- Java基础知识强化30:String类之String的特点(String为什么是final)
1. String字符串特点: 一旦被赋值,字符串值就不能改变. 这里String是final修饰的,具有不可继承性. 2. 为什么String是final? 主要是为了"效率" ...
- linux grep常用参数
# grep [-acinv] [--color=auto] '搜寻字符串' filename选项与参数:-c :计算找到 '搜寻字符串' 的次数-i :忽略大小写的不同,所以大小写视为相同-n :顺 ...
- 手工释放Linux内存
转载自:http://blog.csdn.net/wyzxg/article/details/7279986/ linux的内存查看: [root@localhost 0.1.0]# free -m ...
- ref传参时出错
下面是一段正确的代码: //基类A public class A { public void SomeMethod(A a) { } } //派生类B public class B:A { } //在 ...
- hdu 2203
题意: 子串问题 水题,只要把母串*2,然后比较...... 感觉我好懒....没有自己写函数...... 反正我不是勤快的人......... AC代码: #include <iostream ...