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

时间:2018-04-09 20:44:06

标签: c# utf-8 character-encoding streamwriter

所以我最近在玩,并试图生成一个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

我不确定它是如何变大的。也许我编码错了。也许存在某种与内存泄漏相关的疯狂错误。我很困惑。

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

1 个答案:

答案 0 :(得分:7)

这是因为writer.Write没有byte[]数组的重载。编译器认为您正在尝试调用带有System.Object的重载,因此数组将以"System.Byte[]"的形式写入流中。

使用FileStream的{​​{3}}方法解决此问题。