3

我得到以下代码:

    byte[] myBytes = new byte[10 * 10000];
    for (long i = 0; i < 10000; i++)
    {
        byte[] a1 = BitConverter.GetBytes(i);
        byte[] a2 = BitConverter.GetBytes(true);
        byte[] a3 = BitConverter.GetBytes(false);

        byte[] rv = new byte[10];
        System.Buffer.BlockCopy(a1, 0, rv, 0, a1.Length);
        System.Buffer.BlockCopy(a2, 0, rv, a1.Length, a2.Length);
        System.Buffer.BlockCopy(a3, 0, rv, a1.Length + a2.Length, a3.Length);
    }

一切正常。我试图转换此代码,以便将所有内容写入,myBytes但后来我意识到,我使用了 long,如果它的值更高,那么int.MaxValue转换将失败。怎么能解决这个问题?

另一个问题是,因为我不想在内存中创建一个非常大的字节数组,我怎么能将它直接发送到我的.WriteBytes(path, myBytes);函数?

4

2 回答 2

2

如果按照建议,最终目的地是文件:则更直接地写入文件,而不是在内存中缓冲:

using (var file = File.Create(path)) // or append file FileStream etc
using (var writer = new BinaryWriter(file))
{
    for (long i = 0; i < 10000; i++)
    {
        writer.Write(i);
        writer.Write(true);
        writer.Write(false);
    }
}

在您的情况下,这样做的理想方法可能是在序列化它们时依次将单个BinaryWriter实例传递给每个对象(不要打开和关闭每个对象的文件)。

于 2012-10-12T12:09:31.830 回答
1

为什么在处理它们时不直接将字节写入()而不是转换为大缓冲区,或者至少使用较小的缓冲区?

于 2012-10-12T11:56:37.197 回答