C# 二进制文件的写入和读取

发布时间 2023-08-24 07:45:31作者: 多见多闻

BinaryWriter.Write 和 BinaryReader.ReadInt32 是.NET Framework 中用于读写二进制数据的类。它们提供了一种简单而高效的方式来读写各种二进制数据类型。

BinaryWriter.Write 方法用于将特定类型的数据写入到二进制流中,其中包括整数、浮点数、布尔值、字符和字节数组等。而 BinaryReader.ReadInt32 方法则用于从二进制流中读取一个有符号的 32 位整数。

BinaryWriter 和 BinaryReader 会自动处理数据的分割和解析,因此可以依次写入数据,然后按照相同的顺序依次读取。

在二进制文件中,数据被按照其对应的数据类型进行存储,并且以固定的字节长度表示。例如,一个 Int32 类型的数据在二进制文件中会占用 4 个字节。

写入数据时,BinaryWriter 会根据数据类型将其转换为二进制形式,并按照特定的格式写入到流中。在写入不同类型的数据时,BinaryWriter 会根据数据类型的字节长度进行分割。

读取数据时,BinaryReader 会根据写入时的顺序和数据类型逐个读取并解析出相应的数据。BinaryReader 知道数据的类型和字节长度,因此可以正确地从二进制流中读取数据。

以下是一个完整的示例,演示了依次写入和读取数据的过程:

using (FileStream fileStream = new FileStream("data.bin", FileMode.Create))
using (BinaryWriter writer = new BinaryWriter(fileStream))
{
    int intValue = 42;
    float floatValue = 3.14f;
    string stringValue = "Hello World";

    writer.Write(intValue);
    writer.Write(floatValue);
    writer.Write(stringValue);
}

using (FileStream fileStream = new FileStream("data.bin", FileMode.Open))
using (BinaryReader reader = new BinaryReader(fileStream))
{
    int readIntValue = reader.ReadInt32();
    float readFloatValue = reader.ReadSingle();
    string readStringValue = reader.ReadString();

    Console.WriteLine("Read integer value: " + readIntValue);
    Console.WriteLine("Read float value: " + readFloatValue);
    Console.WriteLine("Read string value: " + readStringValue);
}

在上述示例中,数据按照顺序写入到二进制文件 "data.bin" 中,然后按照相同的顺序从该文件中读取出来。BinaryReader 和 BinaryWriter 会自动处理数据的分割和解析,我们无需手动进行分割或拼接操作。

需要注意的是,在读写二进制数据时,要确保读和写的顺序、类型、大小等都是一致的,否则可能会导致读取错误或数据损坏。

除了 Int32 类型之外,BinaryReader 和 BinaryWriter 还提供了其他方法用于读写不同类型的数据,如 ReadInt16、ReadInt64、WriteSingle、WriteDouble 等,您可以根据实际需求选择适合的方法。另外,使用完毕后,应该及时关闭文件流以释放资源。