关于C#BinaryReader类内部实现方法(扩展)

简单了解内存流第一步(不懂可以翻我另一篇文章有解释)

假设目前我有一个数组A = {11,22,33}
我将他写入内存流中,
此时内存流内部存储的数据实际上是

3       // 数组的长度
11      // 第一个整数值
22      // 第二个整数值
33      // 第三个整数值

然后我们调用的时候binaryReader.ReadInt32()
第一次我们会获取的是3(长度)
然后我们再调用binaryReader.ReadInt32()
这就是第二次调用了,获取的就是11(相当于数组[0])
下面是实际获取方法

int length = binaryReader.ReadInt32(); // 读取数组的长度

int[] intArray = new int[length]; // 创建一个长度为 length 的整数数组

for (int i = 0; i < length; i++)
{
    intArray[i] = binaryReader.ReadInt32(); // 读取数组中的每个整数值
}

扩展了解内存流第二步

假设目前我有一个数组A = {11,22,33},数组B = {55,66,77}写入”内存流“中
此时我第一次调用获取方法的时候,只能获取A数组
binaryReader会记录获取的位置(下标)
这么说把,内存流内部实际存储的是3,11,22,33,3,55,66,77
我们在用上面的方法int length = binaryReader.ReadInt32(); // 读取数组的长度这样就不会读到第二个数组的了

扩展了解文件流存储第三步

假设目前我有一个数组A = {11,22,33},数组B = {55,66,77}写入“文件流”中
此时需要自己把头(数组长度写进去,也可以不写)

using (BinaryWriter binaryWriter = new BinaryWriter(File.Open("data.bin", FileMode.Create)))
{
    // 写入数组A的长度和元素
    int lengthA = A.Length;
    binaryWriter.Write(lengthA);
    foreach (int element in A)
    {
        binaryWriter.Write(element);
    }

    // 写入数组B的长度和元素
    int lengthB = B.Length;
    binaryWriter.Write(lengthB);
    foreach (int element in B)
    {
        binaryWriter.Write(element);
    }
}

文件流和内存流存储的方式不一样,简单来说,文件流不会主动帮你存数组的长度,内存流会.

内存流适合短暂存储数据,文件流适合长期存储数据用