所以我最近在玩,并试图生成一个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 。
我不确定它是如何变大的。也许我编码错了。也许存在某种与内存泄漏相关的疯狂错误。我很困惑。
为什么我的文件太大了?我误解了编码或数学吗?
答案 0 :(得分:7)
这是因为writer.Write
没有byte[]
数组的重载。编译器认为您正在尝试调用带有System.Object
的重载,因此数组将以"System.Byte[]"
的形式写入流中。
使用FileStream
的{{3}}方法解决此问题。