根据从C#编写的方式,两个相同的文件具有不同的文件大小

Man*_*noj 2 c# file-io encoding serialization json

我试图写一个文件序列化为JSON格式的对象数组.我试图用两种不同的方式写它,如下所示.

ToSerialise[] Obj = new ToSerialise[10];
        for (int i = 0; i < 10; i++)
        {
            Obj[i] = new ToSerialise();
        }

        //First form of serialising
        UnicodeEncoding uniEncoding = new UnicodeEncoding();
        String SerialisedOutput;
        SerialisedOutput = JsonConvert.SerializeObject(Obj, Formatting.Indented);
        FileStream fs1 = new FileStream(@"C:\file1.log", FileMode.CreateNew);
        fs1.Write(uniEncoding.GetBytes(SerialisedOutput), 0, uniEncoding.GetByteCount(SerialisedOutput));
        fs1.Close();

        //Second form of serialising
        FileStream fs2 = new FileStream(@"C:\file2.log", FileMode.CreateNew);
        StreamWriter sw = new StreamWriter(fs2);
        JsonWriter jw = new JsonTextWriter(sw);
        JsonSerializer js = new JsonSerializer();
        jw.Formatting = Formatting.Indented;
        js.Serialize(jw, Obj);
        jw.Close();
        fs2.Close();
Run Code Online (Sandbox Code Playgroud)

即使两个文件的内容相同,它们也有不同的文件大小.实际上,第一个文件的大小恰好是第二个文件的两倍.我尝试使用textpad比较输出,它说它们非常相似.为什么他们有不同的文件大小?

我在Windows 7 32位,.Net4上运行它

谢谢

Jon*_*eet 10

即使两个文件的内容相同,它们也有不同的文件大小.

如果它们具有不同的大小,那么它们肯定具有不同的内容.文件(几乎)只是一个字节序列 - 如果两个序列具有不同的长度,则它们是不同的序列.

在这种情况下,这两个文件都代表相同的文本,但使用不同的编码 - file2将使用UTF-8,file1并将使用UTF-16.

要想一个不同的方式:如果你将同一张图片保存为两个文件,一个是JPEG,另一个是PNG,你希望文件大小相同吗?