C# BinaryReader实现读取二进制文件

在 C# 以二进制形式读取数据时使用的是 BinaryReader 类。

BinaryReader 类中提供的构造方法有 3 种,具体的语法形式如下。

第1种形式:

BinaryReader(Stream input)   //其中,input 参数是输入流。

第2种形式:

BinaryReader(Stream input, Encoding encoding)   //其中,input 是指输入流,encoding 是指编码方式。

第3种形式:

BinaryReader(Stream input, Encoding encoding, bool leaveOpen)
//其中,input 是指输入流,encoding 是指编码方式,leaveOpen 是指在流读取后是否包括流的打开状态。

下面分别使用不同的构造方法创建 BinaryReader 类的实例,代码如下。

//创建文件流的实例
FileStream fileStream = new FileStream("D:\\code\\test.txt", FileMode.Open);
BinaryReader binaryReader1 = new BinaryReader(fileStream);
BinaryReader binaryReader2 = new BinaryReader(fileStream, Encoding.UTF8);
BinaryReader binaryReader3 = new BinaryReader(fileStream, Encoding.UTF8, true);

在完成 BinaryReader 类的实例的创建后,即可完成对文件以二进制形式的读取。

BinaryReader 类中的常用属性和方法如下表所示。

属性或方法 作用
int Read() 从指定的流中读取字符
int Read(byte[] buffer, int index, int count) 以 index 为字节数组中的起始点,从流中读取 count 个字节
int Read(char[] buffer, int index, int count) 以 index 为字符数组的起始点,从流中读取 count 个字符
bool ReadBoolean() 从当前流中读取 Boolean 值,并使该流的当前位置提升 1 个字节
byte ReadByte() 从当前流中读取下一个字节,并使流的当前位置提升 1 个字节
byte[] ReadBytes(int count) 从当前流中读取指定的字节数写入字节数组中,并将当前 位置前移相应的字节数
char ReadChar() 从当前流中读取下一个字符,并根据所使用的 Encoding 和从流中读取的特定字符提升流的当前位置
char[] ReadChars(int count) 从当前流中读取指定的字符数,并以字符数组的形式返回 数据,然后根据所使用的 Encoding 和从流中读取的特定字符将当前位置前移
decimal ReadDecimal() 从当前流中读取十进制数值,并将该流的当前位置提升 16 个字节
double ReadDouble() 从当前流中读取 8 字节浮点值,并使流的当前位置提升 8 个字节
short ReadInt16() 从当前流中读取 2 字节有符号整数,并使流的当前位置提升 2 个字节
int ReadInt32() 从当前流中读取 4 字节有符号整数,并使流的当前位置提升 4 个字节
long ReadInt64() 从当前流中读取 8 字节有符号整数,并使流的当前位置提升 8 个字节
sbyte ReadSByte() 从该流中读取 1 个有符号字节,并使流的当前位置提升 1 个字节
float ReadSingle() 从当前流中读取 4 字节浮点值,并使流的当前位置提升 4 个字节
string ReadString() 从当前流中读取一个字符串。字符串有长度前缀,一次 7 位地被编码为整数
ushort ReadUInt16() 从该流中读取的 2 字节无符号整数
uint ReadUInt32() 从该流中读取的 4 字节无符号整数
ulong ReadUInt64()  从该流中读取的 8 字节无符号整数
void FillBuffer(int numBytes) 用从流中读取的指定字节数填充内部缓冲区

在 BinaryReader 类中提供的方法并不是直接读取文件中指定数据类型的值,而是读取由 BinaryWriter 类写入到文件中的。

在上述方法中只有 Read 方法不要求读取的值必须由 BinaryWriter 类写入到文件中。

下面通过实例来演示 BinaryReader 类中 Read 方法的使用。

【实例 1】使用 BinaryReader 类读取记事本文件中的信息。

根据题目要求,在 D:\code 目录下创建一个记事本文件,并在其中输入 abc,使用 BinaryReader 类读取文件中的内容,代码如下。

class Program
{
    static void Main(string[] args)
    {
        FileStream fileStream = new FileStream(@"D:\\code\\test.txt", FileMode.Open);
        BinaryReader binaryReader = new BinaryReader(fileStream);
        //读取文件的一个字符
        int a = binaryReader.Read();
        //判断文件中是否含有字符,若不含字符,a 的值为 -1
        while(a!= -1)
        {
            //输出读取到的字符
            Console.Write((char)a);
            a = binaryReader.Read();
        }
    }
}

执行上面的代码,效果如下图所示。

除了使用 Read 方法每次读取一个字符以外,也可以使用 Read 方法的其他重载方法将字符读取到一个字节数组或字符数组中。

【实例 2】将 test.txt 记事本中的内容读取到字节数组中。

根据题目要求,代码如下。

class Program
{
    static void Main(string[] args)
    {
        FileStream fileStream = new FileStream(@"D:\\code\\test.txt", FileMode.Open,FileAccess.Read);
        BinaryReader binaryReader = new BinaryReader(fileStream);
        //获取文件长度
        long length = fileStream.Length;
        byte[] bytes = new byte[length];
        //读取文件中的内容并保存到字节数组中
        binaryReader.Read(bytes, 0, bytes.Length);
        //将字节数组转换为字符串
        string str = Encoding.Default.GetString(bytes);
        Console.WriteLine(str);
    }
}

执行上面的代码,效果与实例 1 中一致。同样,在读取文件中的内容时也可以将内容存放到字符类型的数组中。

到此这篇关于C# BinaryReader实现读取二进制文件的文章就介绍到这了,更多相关C# BinaryReader读取二进制内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • c# 以二进制读取文本文件

    复制代码 代码如下: using System; using System.IO; public class FileApp {     public static void Main()     {         // 在当前目录创建一个文件myfile.txt,对该文件具有读写权限         FileStream fsMyfile = new FileStream("myfile.txt" , FileMode.Create, FileAccess.ReadWrite);

  • C#读取二进制文件方法分析

    本文较为详细的分析了C#读取二进制文件方法.分享给大家供大家参考.具体分析如下: 当想到所有文件都转换为 XML时,确实是一件好事.但是,这并非事实.仍旧还有大量的文件格式不是XML,甚至也不是ASCII.二进制文件仍然在网络中传播,储存在磁盘上,在应用程序之间传递.相比之下,在处理这些问题方面,它们比文本文件显得更有效率些. 在 C 和 C++ 中,读取二进制文件还是很容易的.除了一些开始符(carriage return)和结束符(line feed)的问题,每一个读到C/C++中的文件都是

  • C# BinaryReader实现读取二进制文件

    在 C# 以二进制形式读取数据时使用的是 BinaryReader 类. BinaryReader 类中提供的构造方法有 3 种,具体的语法形式如下. 第1种形式: BinaryReader(Stream input) //其中,input 参数是输入流. 第2种形式: BinaryReader(Stream input, Encoding encoding) //其中,input 是指输入流,encoding 是指编码方式. 第3种形式: BinaryReader(Stream input,

  • 利用Java读取二进制文件实例详解

    前言 本文主要给大家介绍了关于Java读取二进制文件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 读Hex写CSV data目录下有little-endian bin文件,2个字节代表一个数字. bin存储的数据格式可自己定义.相同的方法可以直接应用到Android中. `-- networkProj |-- data |-- networkProj.iml |-- out `-- src 实现方法 private static void convertFiles

  • 使用Python读取二进制文件的实例讲解

    目标:目标文件为一个float32型存储的二进制文件,按列优先方式存储.本文使用Python读取该二进制文件并使用matplotlib.pyplot相关工具画出图像 工具:Python3, matplotlib,os,struct,numpy 1. 读取二进制文件 首先使用open函数打开文件,打开模式选择二进制读取"rb". f = open(filename, "rb") 第二步,需要打开按照行列读取文件,由于是纯二进制文件,内部不含邮任何的数据结构信息,因此我

  • 利用 Python 中的内置open函数读取二进制文件

    在python中读取一个文本文件相信大家都比较熟悉了,但如果我们遇到一个二进制文件要读取怎么办呢?我们尝试使用 Python 中的内置 open 函数使用默认读取模式读取 zip 文件,抱歉,我们将收到错误消息: >>> with open("exercises.zip") as zip_file: ... contents = zip_file.read() ... Traceback (most recent call last): File "<

  • JS幻想 读取二进制文件第1/2页

    且不说浏览器内置的HTTP插件是否支持二进制数据流,就JavaScript其自身就毫无二进制的处理能力.聪明的读者也许想说用VBScript就可以实现了.不错,因为VBScript,IE,ActiveX都是微软的产物,所以他们有着无缝的结合.IE的HTTP组件确实能够读取二进制数据,而且也只能够让VBScript读取.但对于其他浏览器,就束手无策了. 毕竟脚本的理念仅仅是用来处理一些简单的交互的,对于处理字节流之类的复杂问题完全不该是脚本的职责.不过作为一种探索,我们还是可以挖掘下其中的乐趣.当

  • Python读取二进制文件代码方法解析

    问题 有二进制文件中保存了 20 亿个 2 Bytes 的数,需将其读出,每 20000 个数作图,拟合后输出结果. 解决 # -*- coding: utf-8 -*- """ @author: kurrrr """ import struct def main(): data_file = open('run0035.bin', 'rb') data_temp = data_file.read(2) data_short, = struct.

  • c#中CAD文件读取实例

    本篇实例内容是关于C#读取CAD文件的,直接看代码 //在不使用任务插件的情况下读取DWG文件的缩略图,以便在没有安装AutoCAD的计算机上浏览. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Syst

  • Python二进制文件读取并转换为浮点数详解

    本文所用环境: Python 3.6.5 |Anaconda custom (64-bit)| 引言 由于某些原因,需要用python读取二进制文件,这里主要用到struct包,而这个包里面的方法主要是unpack.pack.calcsize.详细介绍可以看:Python Struct 官方文档.这里主要讨论,python二进制转浮点数的操作. python中一个float类型的数占4个字节. 二进制数据转float,可以用struct.unpack()来实现. 小文件读取 较小的文件,可以一次

  • 在Python程序中进行文件读取和写入操作的教程

    读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件). 读文件 要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符: >>> f =

随机推荐