3

我正在尝试将序列化为 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();

即使两个文件的内容相同,它们的文件大小也不同。实际上,第一个文件的大小正好是第二个文件的两倍。我尝试使用 textpad 比较输出,它说它们完全一样。为什么它们有不同的文件大小?

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

谢谢

4

1 回答 1

11

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

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

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

换一种方式来考虑:如果您将同一张图片保存到两个文件中,一个为 JPEG,一个为 PNG,您是否希望文件大小相同?

于 2012-04-10T13:15:13.850 回答