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详解【转】的更多相关文章

  1. FileStream和BinaryReader,BinaryWriter,StreamReader,StreamWriter的区别

    FileStream对于在文件系统上读取和写入文件非常有用,FileStream缓存输入和输出,以获得更好的性能.FileStream对象表示在磁盘或网络路径上指向文件的流.这个类提供了在文件中读写字 ...

  2. html视频播放器的代码 及其参数详解

    播放视频最实用的一段代码是: 程序代码 <"></embed></object> 其他的看参数自己修改吧 .avi格式 代码片断如下: 程序代码 < ...

  3. spring mvc拦截器和<mvc:annotation-driven />的详解

    MVC的拦截器 经本人在Spring mvc中对方案1和方案2的测试表明,并没有拦截静态资源,所以可以放心使用方案1和方案2,方案3可以放弃,并且可以放心使用<mvc:annotation-dr ...

  4. STL--迭代器(iterator)使用详解

    迭代器的分类 在STL中,原生指针也是一种迭代器,除了原生指针以外,迭代器被分为五类: Input Iterator 此迭代器不允许修改所指的对象,即是只读的.支持==.!=.++.*.->等操 ...

  5. Scala高手实战****第20课:Scala提取器、注解深度实战详解及Spark源码鉴赏

    Spark中的源码的提取器和注解 @SparkContext.scala @ volatile 线程专用 保证线程间共享内容的一致性 @volatile private var _dagSchedul ...

  6. SpringMVC拦截器的配置与使用详解

         一.SpringMVC拦截器简介      Spring MVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.在springmvc中,定义拦截 ...

  7. boost asio异步读写网络聊天程序客户端 实例详解

    boost官方文档中聊天程序实例讲解 数据包格式chat_message.hpp <pre name="code" class="cpp">< ...

  8. G1 垃圾收集器深入剖析(图文超详解)

    G1(Garbage First)垃圾收集器是目前垃圾回收技术最前沿的成果之一. G1 同 CMS 垃圾回收器一样,关注最小时延的垃圾回收器,适合大尺寸堆内存的垃圾收集.但是,G1 最大的特点是引入分 ...

  9. javaCV开发详解之3:收流器实现,录制流媒体服务器的rtsp/rtmp视频文件(基于javaCV-FFMPEG)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

随机推荐

  1. 如何通过编译Linux内核打开IPVS(LVS)的debug模式

    前言 为了定位keepalived VIP的问题, 一步一步定位到IPVS, IPVS默认是没有打开Debug模式的, 若需要打开Debug模式需要重新编译IPVS模块加载后才行, 最好的方式当然是仅 ...

  2. HTTP常见响应状态码

    200 : (OK) 服务器已成功处理了请求. 通常,这表示服务器提供了请求的网页. 201 : (Created) 请求成功并且服务器创建了新的资源. 301 : (Moved Permanentl ...

  3. MonologFX最简demo,javafx外用dialog示例

    参考blog:https://blogs.oracle.com/javajungle/entry/monologfx_floss_javafx_dialogs_for /* * To change t ...

  4. springbank 开发日志 阅读spring mvc的源代码真是受益良多

    决定模仿spring mvc的dispatcher->handlerMapping(return executorChain)->handler.execute 这样的流程之后,就开始看s ...

  5. java:从指定问价中读取80个字节写入指定文件中

    import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; public class F ...

  6. Arbitrage HDU1217

    汇率转换问题: 怎么样才能套利 可以用Floyd算法: #include<bits/stdc++.h> using namespace std; ][]; int main() { int ...

  7. Java相关英语单词

    day1 Java概述 掌握 .JDK abbr. Java开发工具包(Java Developer's Kit) (abbr.缩写) .JRE abbr. Java运行环境(Java Runtime ...

  8. 8.Django-form组件

    1.form组件的校验功能 文件formsdemo models from django.db import models # Create your models here. class UserI ...

  9. 《Gradle权威指南》--Gradle任务

    No1: 多种方式创建任务 def Task ex41CreateTask1 = task(ex41CreateTask1) ex41CreateTask1.doLast{ println " ...

  10. 附003.Docker Compose命令详解

    一 Docker Compose命令格式 Usage: docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...] docker- ...