an *_*wig 0 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();
Run Code Online (Sandbox Code Playgroud)
我的想法是,因为UTF8字符是1字节而1GB是大约1,073,741,824字节,所以写入单个UTF8字符1,073,741,824次将导致大约1GB的文件大小.
我运行了我的小程序,正如预期的那样,它开始放慢速度并减少记忆.我最终过早杀了它,然后检查文件大小,好奇我有多远.令我惊恐的是,该文件高达13GB.
我不确定它是如何变大的.也许我编码错了.也许存在某种与内存泄漏相关的疯狂错误.我只是困惑.
为什么我的文件太大了?我误解了编码或数学吗?
这是因为数组writer.Write没有重载byte[].编译器认为您正在尝试调用重载System.Object,因此数组将被写入流中"System.Byte[]".
通过使用修正这个FileStream的Write(Byte\[\], int, int)方法.