C# BinaryReader.Read – 读取基本数据类型

  • Post category:C#

BinaryReader 是 C# 中用于读取二进制数据的一个类,而其中的 Read 方法是该类最基础的一个方法之一。其作用是读取二进制流中指定范围内的指定个数的字节,并将其转换成相应的数据类型。

具体来说,Read 方法有多种重载形式,每个形式在读取指定类型的字节时都有所不同。以下以其中最常用的几种形式进行讲解。

Read 方法重载形式

Read()

这个形式不接受任何参数,它会读取二进制流中的下一个字节,并返回一个无符号字节。

using (var stream = new MemoryStream(new byte[]{ 1, 2, 3 }))
using (var reader = new BinaryReader(stream))
{
    Console.WriteLine(reader.Read());     //输出 1
    Console.WriteLine(reader.Read());     //输出 2
    Console.WriteLine(reader.Read());     //输出 3
}

Read(byte[] buffer, int index, int count)

这个形式接受三个参数,它会从二进制流中读取指定个数的字节,并放到一个缓冲区中。其中:

  • buffer 为要放入的缓冲区。
  • index 为从 buffer 的哪个位置开始放,从 0 开始计数。
  • count 为要读取的字节数。
var bytes = new byte[] { 1, 2, 3 };
var buffer = new byte[2];
using (var stream = new MemoryStream(bytes))
using (var reader = new BinaryReader(stream))
{
    reader.Read(buffer, 0, buffer.Length);
    Console.WriteLine(string.Join(", ", buffer));     //输出 1, 2
}

ReadBoolean()

这个形式不接受任何参数,它会读取一个布尔值,并返回一个 bool 类型的值。

using (var stream = new MemoryStream(new byte[]{ 0x01, 0x00 }))
using (var reader = new BinaryReader(stream))
{
    Console.WriteLine(reader.ReadBoolean());     //输出 true
    Console.WriteLine(reader.ReadBoolean());     //输出 false
}

ReadInt32()

这个形式不接受任何参数,它会读取 4 个字节,并返回一个 int 类型的值。

using (var stream = new MemoryStream(new byte[]{ 0x01, 0x02, 0x03, 0x04 }))
using (var reader = new BinaryReader(stream))
{
    Console.WriteLine(reader.ReadInt32());     //输出 16909060
}

总结

BinaryReader 的 Read 方法可以读取二进制流中的各种类型的字节,包括基本类型和自定义类型。针对不同的读取要求,可以选择不同的重载形式。

总的来说,重载形式很多,我们需要根据具体的需求来选择相应的形式。使用注意事项包括:二进制流的编码格式,数据类型的大小端问题等。网上有很多相关案例供参考。