将大量 UTF8 字节写入文件会导致大量膨胀

Writing a large amount of UTF8 bytes to a file results in massive bloat

所以我最近在玩,并试图生成一个 1GB 的文件。

StreamWriter writer = new StreamWriter(@"C:\Users\parsonsj\Desktop\data.dat");
Encoding utf8enc = UTF8Encoding.UTF8;

for (int i = 0; i < 1073741824; i++) {
    writer.Write(utf8enc.GetBytes("#"));
}
writer.Close();

我的想法是,由于 UTF8 字符是 1 个字节,而 1GB 大约是 1,073,741,824 字节,因此写入单个 UTF8 字符 1,073,741,824 次将导致大约 1GB 的文件大小。

我 运行 我的小程序,正如预期的那样,它开始减慢速度并占用内存。我最终过早地杀死了它,然后去检查文件大小,好奇我能走多远。令我震惊的是,该文件是一个惊人的 13GB.

我不知道它是怎么变得这么大的。也许我编码错误。也许存在某种疯狂的内存泄漏相关错误。我只是很困惑。

为什么我的文件这么大?我误解了编码或数学吗?

这是因为 writer.Write 没有 byte[] 数组的重载。编译器认为您正在尝试调用采用 System.Object 的重载,因此数组将作为 "System.Byte[]".

写入流

使用 FileStreamWrite(Byte\[\], int, int) 方法解决此问题。