2012-04-10 3 views
1

Я пытаюсь записать в файл массив объектов, сериализованных в формате JSON. Я пытаюсь записать его двумя способами, как показано ниже.Два одинаковых файла имеют разный размер файла, основанный на том, как он написан с C#

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

Несмотря на то, что содержимое обоих файлов одинаково, они имеют разный размер файла. На самом деле первый файл в два раза больше второго. Я попытался сравнить результат с помощью текстовой панели, и он говорит, что они являются абсолютно одинаковыми. Почему у них разные размеры файлов?

Я бегу это на Windows 7 32 битной, .Net4

Благодаря

+0

Вы пытались открыть два файла, созданные в WinHex или что-то подобное? Это позволит вам определить различия между ними в шестнадцатеричном шестнадцатеричном формате и может помочь вам узнать, что заставляет их сохранять разные размеры файлов. – GeorgePotter

+0

«Два одинаковых файла имеют разный размер файла». Это просто противоречие в терминах. – EJP

+0

@ EJP Правильно, это правда, но некоторые утилиты сравнения файлов показывают файлы одинаковыми. У меня такая же проблема. Вопрос в том, как (и, в моем случае, второй файл имеет размер около 200%!). – Andrew

ответ

9

Даже если содержание обоих файлов одинаковы, они имеют разный размер файла.

Если у них другой размер, то они определенно имеют различное содержание. Файл (почти) - просто последовательность байтов - и если две последовательности имеют разную длину, это разные последовательности.

В этом случае два файла оба представляют собой один и тот же текст , но с использованием различных кодировок - file2 будет использовать UTF-8, и file1 будет использовать UTF-16.

Чтобы думать об этом по-другому: если вы сохранили одну и ту же картинку в двух файлах, один в формате JPEG и один в формате PNG, вы ожидали бы, что файлы будут одинакового размера?

+0

Спасибо за быстрый ответ! Теперь я вижу свойства файла, он говорит ANSI и Unicode соответственно. – Manoj

+0

@Manoj: «ANSI» - это просто предположение (и это даже не точный термин в этом контексте). Это действительно * с использованием UTF-8, но если ваш текст содержит только ASCII, вы можете прочитать его с любой кодировкой, совместимой с ASCII, и вы получите те же результаты. –

+0

Теперь я немного смущен. UTF-8 означает, что он использует 8 бит для представления каждого символа? Я думал, что ASCII имеет 256 символов, и поэтому они совпадают. UTF-16 допускает 65536 вариаций символов и, следовательно, пространство для представления большего количества скриптов. Это правильно? Но теперь я вижу википедию. Я вижу, что Unicode может быть представлен в UTF 8 и UTF 16. Как это? – Manoj

Смежные вопросы