3

JSON 形式にシリアル化されたオブジェクトの配列をファイルに書き込もうとしています。以下に示すように、2つの異なる方法で記述しようとしています。

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();

両方のファイルの内容は同じですが、ファイル サイズが異なります。実際には、最初のファイルは 2 番目のファイルのちょうど 2 倍のサイズです。テキストパッドを使用して出力を比較してみましたが、まったく同じであると表示されています。ファイルサイズが異なるのはなぜですか?

これをWindows 7 32ビット、.Net4で実行しています

ありがとう

4

1 に答える 1

11

両方のファイルの内容は同じですが、ファイル サイズが異なります。

サイズが違えば、中身が違うのは間違いない。ファイルは (ほとんど) 単なるバイトのシーケンスです。2 つのシーケンスの長さが異なる場合、それらは異なるシーケンスです。

この場合、2 つのファイルはどちらも同じテキストを表しますが、異なるエンコーディングfile2を使用し、UTF-8file1を使用し、UTF-16 を使用します。

別の見方をすると、同じ画像を 2 つのファイル (1 つは JPEG、もう 1 つは PNG) に保存した場合、ファイルは同じサイズになると思いますか?

于 2012-04-10T13:15:13.850 に答える