C#中流的读写器BinaryReader、BinaryWriter,StreamReader、StreamWriter详解【转】
https://blog.csdn.net/ymnl_gsh/article/details/80723050
C#的FileStream类提供了最原始的字节级上的文件读写功能,但我们习惯于对字符串操作,于是StreamWriter和 StreamReader类增强了FileStream,它让我们在字符串级别上操作文件,但有的时候我们还是需要在字节级上操作文件,却又不是一个字节 一个字节的操作,通常是2个、4个或8个字节这样操作,这便有了BinaryWriter和BinaryReader类,它们可以将一个字符或数字按指定 个数字节写入,也可以一次读取指定个数字节转为字符或数字。
StreamWriter sr=new StreamWriter(@"xxxx.txt"); ->文本读写
FileStream fs=File.Open(@"xxx.dat",FileMode.Open);
BinaryWriter bw=new BinaryWriter(fs);); ->二进制读写
注意,从FileInfo.OpenWrite()返回的FileStream对象被传到BinaryWriter类型的构造函数中。使用这项技术就能很方便地在写入数据前引入一个流。需要理解的是,BinaryWriter构造函数能接受任何派生自Stream类型的参数(比如FileStream、MemoryStream或BufferedStream)。
文本读写器(StreamWriter/Reader)和二进制读写器(Binary Writer/Reader)的关系:
首先两者都是基于流来操作文件进行读写的,但后者是以二进制的方式来进行的,后者写入文件后双击打开会是乱码(该文件后缀为.dat),读写都具体的数据类型来操作流的位置,进行读取的时候要通过具体数据类型读取,例如br.ReadInt32()...;
文本读写器中写入具体文件中的是字符串的文本格式,双击打开该文件是可以阅读的,同时在运用StreamReader对象进行读取时,就不能以具体类型大小来操作流的位置了,而是以字符大小为单位操作流的位置的,读出来的也是一个字符串,而不是具体类型。
namespace ch16
{
class Program
{
static void txtOperate() //文本输入输出
{
string t = @"F:\test\tt.txt";
try
{
using (StreamWriter sw1 = new StreamWriter(t))
{
sw1.WriteLine("123"); sw1.WriteLine("456");
Console.WriteLine("写入成功!");
}
using (StreamReader sr=new StreamReader(t))
{
Console.WriteLine("文本内容为:");
string line;
while ((line = sr.ReadLine()) != null) { Console.WriteLine(line); }
}
}
catch (Exception e) { Console.WriteLine(e.Message); }
}
static void binaryRW(string fileName)//二进制文件输入输出
{
using (BinaryWriter bw = new BinaryWriter(File.Open(fileName, FileMode.Create)))
{
bw.Write(10);
bw.Write("hello binary!");
bw.Write(true);
}
using (BinaryReader br = new BinaryReader(File.Open(fileName, FileMode.Open)))
{
int i1 = br.ReadInt32();
string s = br.ReadString();
bool b = br.ReadBoolean();
Console.WriteLine("{0},{1},{2}", i1, s, b);
}
}
static void Main(string[] args)
{
binaryRW(@"d:\abc.dat");
Console.Read();
}
}
}
C#中流的读写器BinaryReader、BinaryWriter,StreamReader、StreamWriter详解【转】的更多相关文章
- FileStream和BinaryReader,BinaryWriter,StreamReader,StreamWriter的区别
FileStream对于在文件系统上读取和写入文件非常有用,FileStream缓存输入和输出,以获得更好的性能.FileStream对象表示在磁盘或网络路径上指向文件的流.这个类提供了在文件中读写字 ...
- html视频播放器的代码 及其参数详解
播放视频最实用的一段代码是: 程序代码 <"></embed></object> 其他的看参数自己修改吧 .avi格式 代码片断如下: 程序代码 < ...
- spring mvc拦截器和<mvc:annotation-driven />的详解
MVC的拦截器 经本人在Spring mvc中对方案1和方案2的测试表明,并没有拦截静态资源,所以可以放心使用方案1和方案2,方案3可以放弃,并且可以放心使用<mvc:annotation-dr ...
- STL--迭代器(iterator)使用详解
迭代器的分类 在STL中,原生指针也是一种迭代器,除了原生指针以外,迭代器被分为五类: Input Iterator 此迭代器不允许修改所指的对象,即是只读的.支持==.!=.++.*.->等操 ...
- Scala高手实战****第20课:Scala提取器、注解深度实战详解及Spark源码鉴赏
Spark中的源码的提取器和注解 @SparkContext.scala @ volatile 线程专用 保证线程间共享内容的一致性 @volatile private var _dagSchedul ...
- SpringMVC拦截器的配置与使用详解
一.SpringMVC拦截器简介 Spring MVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.在springmvc中,定义拦截 ...
- boost asio异步读写网络聊天程序客户端 实例详解
boost官方文档中聊天程序实例讲解 数据包格式chat_message.hpp <pre name="code" class="cpp">< ...
- G1 垃圾收集器深入剖析(图文超详解)
G1(Garbage First)垃圾收集器是目前垃圾回收技术最前沿的成果之一. G1 同 CMS 垃圾回收器一样,关注最小时延的垃圾回收器,适合大尺寸堆内存的垃圾收集.但是,G1 最大的特点是引入分 ...
- javaCV开发详解之3:收流器实现,录制流媒体服务器的rtsp/rtmp视频文件(基于javaCV-FFMPEG)
javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...
随机推荐
- Redhat5_linux 系统环境下 oracl11g的安装教程图解
linux_oracl11g 安装步骤 操作系统的安装敬请参考此文:VM 安装 linux Enterprise_R5_U4_Server_I386_DVD教程图解 设置linux服务器的静态地址请参 ...
- vue首次赋值不触发watch
可通过其immediate 属性进行配置,默认为false watch:{ "aaa":{ immediate:true, handler:function(){ } }
- cf803c 数论
细节很多的题 #include<bits/stdc++.h> using namespace std; #define ll long long int main(){ ll n,k,tm ...
- 【转】crontab实用手册
前言 crontab是Unix和Linux用于设置周期性被执行的指令,是互联网很常用的技术,很多任务都会设置在crontab循环执行,如果不使用crontab,那么任务就是常驻程序,这对你的程序要求比 ...
- MVC开发中的常见错误-03-System.Data.Entity.Validation.DbEntityValidationException: 对一个或多个实体的验证失败。有关详细信息,请参见“EntityValidationErrors”属性。
return Db.SaveChanges()>0; return CurrentDBSession.SaveChanges(); RoleInfoService.EditEntity(role ...
- oracle表分区创建
一.什么是分区表表分区有以下优点: 1.数据查询:数据被存储到多个文件上,减少了I/O负载,查询速度提高. 2.数据修剪:保存历史数据非常的理想. 3.备份:将大表的数据分成多个文件,方便备份和恢复. ...
- bootstrap之排版样式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- canvas图像保存
很多时候绘制完成的图片需要保存,那么我们就可以使用到Canvas API来完成这最后一步! Canvas API使用toDataURL方法把绘画的状态输出到一个data URL中然后重新装载,然后我们 ...
- struts2的文件上传和文件下载
实现使用Struts2文件上传和文件下载: 注意点: (1)对应表单的file1和私有成员变量的名称必须一致 <input type="file" name="fi ...
- canvas抛物线运动轨迹
本来是想做一个贝塞尔曲线运动轨迹的 公式太复杂了,懒得算,公式在最后 我先画了一个抛物线,我确定了两个点,起点(0,0),终点(200,200) 用坐标系可算出方程 y=-0.005x^2 现在找出终 ...