3-4  读写二进制文件

u本节学习目标:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
n了解二进制文件读取器/编写器
n学习建立BinaryReader类的一些主要方法
n学习建立BinaryWriter类的一些主要方法
n学习通过二进制读写操作进行图片的存储与复制
n学习通过二进制读写操作实现图片文件与数据库Image类型数据的存储与读取
在前面两节,读写的文件都是针对文本文件。这一节,重点讲述二进制文件的读写。什么是二进制文件呢?
 
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />小知识:
二进制文件
英文:Binary files - 包含在 ASCII 及扩展 ASCII 字符中编写的数据或程序指令的文件。计算机文件基本上分为二种:二进制文件和 ASCII(也称纯文本)文件,图形文件及文字处理程序等计算机程序都属于二进制文件。这些文件含有特殊的格式及计算机代码。ASCII 则是可以用任何文字处理程序阅读的简单文本文件。
从本质上来说他们之间没有什么区别,因为他们在硬盘上都有一种的存放方式--二进制,但是如果要对他们有些区分的话,那可以这样理解。我们现在的每个字符由一个或多个字节组成,每个字节都是用的-128—127之间的部分数值来表示的,也就是说,-128——127之间还有一些数据没有对应任何字符的任何字节。如果一个文件中的每个字节的内容都是可以表示成字符的数据,我们就可以称这个文件为文本文件,可见,文本文件只是二进制文件中的一种特例,为了与文本文件相区别,人们又把除了文本文件以外的文件称为二进制文件,由于很难严格区分文本文件和二进制文件的概念,所以我们可以简单地认为,如果一个文件专门用于存储文本字符的数据,没有包含字符以外的其他数据,我们就称之为文本文件,除此之外的文件就是二进制文件。

<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />

3-4-1 二进制文件读取器/编写器介绍

    在读写二进制文件时,需要研究的读取器/编写器组是BinaryReader和BinaryWriter,它们都从System.Object直接派生。这些类型可以让我们从基层流中以简洁的二进制格式读取或写入离散数据类型。BinaryWriter类型定义了一个多次重载的Write()方法,用于把数据类型写入基层的流。除了Write()方法,BinaryWriter还提供了另外一些成员让我们能获取或设置从Stream派生的类型,并且提供了随机数据访问的支持。建立读取器/编写器(BinaryReader和BinaryWriter)需要注意的事项有两点:
n要使用 BinaryReader 和 BinaryWriter 类
n这两个对象都需要在FileStream上创建
 
小实验:建立一个BinaryWriter对象
FileStream filestream = new FileStream(Filename, FileMode.Create);
BinaryWriter objBinaryWriter = new BinaryWriter(filestream);
类BinaryReader用特定的编码将基元数据类型读作二进制值。类BinaryReader有几个常用的方法,如表3-13所示:
表3-13 类BinaryReader的常用方法
方法
说明
Close()
关闭当前阅读器及基础流。
Read()
已重载。 从基础流中读取字符,并提升流的当前位置。
ReadDecimal()
从当前流中读取十进制数值,并将该流的当前位置提升十六个字节。
ReadByte()
从当前流中读取下一个字节,并使流的当前位置提升1个字节。
ReadInt16()
从当前流中读取2字节有符号整数,并使流的当前位置提升2个字节。
ReadInt32()
从当前流中读取4字节有符号整数,并使流的当前位置提升4个字节。
ReadString()
从当前流中读取一个字符串。字符串有长度前缀,一次7位地被编码为整数。
 
小实验:建立一个BinaryReader类的一些主要方法
using System;
using System.IO;
class BinaryRW
{
    static void Main()
    {
        int i = 0;
        char[] invalidPathChars = Path.InvalidPathChars;
        MemoryStream memStream = new MemoryStream();
        BinaryWriter binWriter = new BinaryWriter(memStream);
        // 写入内存
        binWriter.Write("Invalid file path characters are: ");
        for (i = 0; i < invalidPathChars.Length; i++)
        {
            binWriter.Write(invalidPathChars[i]);
        }
        // 用作生成编写器的内存流同样作为生成读取器的内存流
        BinaryReader binReader = new BinaryReader(memStream);
        // 设置流的起点
        memStream.Position = 0;
        // 从内存中读取数据,并把数据写入控制台
        Console.Write(binReader.ReadString());
        char[] memoryData = new char[memStream.Length - memStream.Position];
        for (i = 0; i < memoryData.Length; i++)
        {
            memoryData[i] = Convert.ToChar(binReader.Read());
        }
        Console.WriteLine(memoryData);
    }
}
类BinaryWriter以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。类BinaryWriter有几个常用的方法,如表3-14所示:
表3-14 类BinaryWriter的常用方法
方法
说明
Close()
关闭当前的 BinaryWriter 和基础流。
Flush()
清理当前编写器的所有缓冲区,使所有缓冲数据写入基础设备。
Write()
已重载。 将值写入当前流。
 
小实验:建立一个BinaryWriter类的一些主要方法
 
using System;
using System.IO;
class BinaryRW
{
    static void Main()
    {
        using (BinaryWriter binWriter = new BinaryWriter(File.Open(fileName, FileMode.Create)))
        {
            binWriter.Write(aspectRatio);
            binWriter.Write(lookupDir);
            binWriter.Write(autoSaveTime);
            binWriter.Write(showStatusBar);
        }
    }
}

转载于:https://blog.51cto.com/qianshao/210969

3-6 读写二进制文件相关推荐

  1. R语言读写二进制文件:WriteBin()、readBin()

    R语言读写二进制文件:WriteBin().readBin() 目录 R语言读写二进制文件:WriteBin().readBin() WriteBin()和readBin()语法

  2. python读写二进制文件(读写字节数据)

    python读写二进制文件(读写字节数据) 你想读写二进制文件,比如图片,声音文件等就是常见的二进制文件. 使用模式为 rb 或 wb 的 open() 函数来读取或写入二进制数据.比如: # Rea ...

  3. 一种C#读写二进制文件的通用方法

    在日常的工作中,我们经常需要进行一些二进制文件或协议的读写操作,用C#解析二进制文件常常是一件比较麻烦且容易出错的工作,本文介绍了一种在C#中实现快速读写二进制文件通用的方法. 以一个解析Mp3 ID ...

  4. python读写二进制文件的方法

    本文实例讲述了python读写二进制文件的方法.分享给大家供大家参考.具体如下: 初学python,现在要读一个二进制文件,查找doc只发现 file提供了一个read和write函数,而且读写的都是 ...

  5. QT学习:读写二进制文件

    使用QDataStream读写二进制文件. 具体用法见如下代码: (1)头文件"mainwindow.h"的具体代码如下: #include <QMainWindow> ...

  6. Java读写二进制文件

    import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io ...

  7. C++实现对象序列化和反序列化(读写二进制文件)操作

    相关函数介绍 在我们的C语言中读写二进制文件一般使用的fread.fwrite全局函数,当然也可以使用更底层的read和write函数.在我们的C++中 通过ofstream 和 ifstream 对 ...

  8. Python+pickle读写二进制文件小案例

    对于二进制文件,不能使用记事本或其他文本编辑软件进行正常读写,也无法通过Python的文件对象直接读取和理解二进制文件的内容.必须正确理解二进制文件结构和序列化规则,才能准确地理解二进制文件内容并且设 ...

  9. python二进制写入文件_python读写二进制文件的方法

    本文实例讲述了python读写二进制文件的方法.分享给大家供大家参考.具体如下: 初学python,现在要读一个二进制文件,查找doc只发现 file提供了一个read和write函数,而且读写的都是 ...

最新文章

  1. 网页连接不上java服务端,用Java插入IP时无法连接到服务器
  2. onTouchEvent
  3. docker 安装git_docker随手笔记第十二节 jenkins+docker+nginx+纯静态页面配置
  4. 键盘录入一个正整数,把它的各个位上的数字倒着排列形成一个新的整数并输出。 例如:12345 数出54321 78760 输出6787(0省去)
  5. xcode配置最新版opencv
  6. java merge_java – OptimisticLockException当使用JPA merge()
  7. 使用Kibana画图展示Nginx日志报表
  8. Leetcode—6.相向双指针的剩余题型python解答
  9. [asp.net mvc 奇淫巧技] 06 - 也许你的项目同一个用户的请求都是同步的
  10. Memcache与Redis的区别
  11. STM32G474 CANFD 用例详解
  12. 宅霸java_宅霸游戏联机平台下载|宅霸游戏联机平台免费版下载 v4.5.0 官方版_小皮网...
  13. Hibernate实战——Enumerated注解
  14. Mapbox使用之glyphs(字体符号)
  15. 在键盘上怎么点出来上下居中的点?
  16. MySQL中show命令用法大全
  17. 高并发解决方案 超详细!!!
  18. Keil5安装和使用小记
  19. 基于ARM核心板实现的BMS可行性方案
  20. Python识别璇玑图中诗的数量

热门文章

  1. 2019年浙大计算机专业前景,2019年浙大计算机专业一志愿录取.pdf
  2. 地图上制作线路的动画_R制作动画地图
  3. 微擎自动回复 加粉丝名_如何一天加100个精准粉丝?蒋老师告诉你系统的套路和方法...
  4. gdc服务器系统备份和还原,FANUC镜像系统如何备份及恢复
  5. 1.简述计算机硬盘如何保养,电脑硬盘的保养知识
  6. mysql客户端新建一个表_MySQL 建库、建用户及建表事项
  7. 贝叶斯集锦:从MC、MC到MCMC
  8. python 整数对应的字符,在Python中将字符串从字母解密为整数映射
  9. 汇编学习--7.16--int指令
  10. 三百行python代码的项目_300行Python代码打造实用接口测试框架