2017-02-08 6 views
0

Можно ли хранить десятичное значение в формате JSON (строка, объект) в текстовом файле и впоследствии извлекать его как десятичное без необходимости выполнять листинг/разборку и т. Д. ?C# - хранить десятичный знак в файле и читать обратно

Например, файл может также храниться в двоичном формате, они не должны обрабатываться как десятичные.

файл не будет содержать никакой дополнительной информации, чтобы определить тип переменной:

"num1": 4,

"num2": 5,4 (как двойной)

"num3": 563,2334 (в десятичной системе)

+0

Почему вы хотите избежать разбора значений? – NicoRiff

+0

* «без необходимости делать литье/разборки любого типа» * - как вы предполагаете отличать десятичные числа от удвоений в этом случае, если синтаксический разбор разрешен? –

+2

Что это за файл? Текст? Binary? JSON? XML? Знает ли код чтения, какие значения должны быть десятичными и которые должны быть двойными? На данный момент этот вопрос очень неясен. –

ответ

6

Да, это возможно с помощью бинарного автор:

using(var bw = new BinaryWriter(File.OpenWrite("myFile.txt"))) 
{ 
    bw.Write(1234.01m); //there is actualy 16 bytes written to file. Double is 8 bytes long. 
    bw.Write((double)5); 
} 

Таким образом, вы сможете избежать разбора его текстовой represenatation и нагрузки прямо в память:

using(var br = new BinaryReader(File.OpenRead("myFile.txt"))) 
{ 
    var myDecimal = br.ReadDecimal();//1234.01 
    var myDouble = br.ReadDouble();//5 
} 

Вам не нужны какие-либо дополнительные данные. Десятичный и Double имеют различный размер памяти:

  • десятичного 16 байт
  • Двойник 8 байт

Так что если вы хотите сохранить ваши ценности в JSON так плохо, чтобы быть способный быстро его извлечь -> не делайте этого. Вероятно, это не стоит того, и вот почему:

JSON - это сам формат, и он будет разобрать/преобразовать его, даже если вы храните его в массиве байтов. Если вы предпочитаете скорость над читабельностью - используйте другие рамки сериализации. Например, protobuf.

+0

Вероятно, лучше * не * дать файлу расширение .txt, когда оно явно не является текстовым файлом. –

+0

Actualy, вы можете предоставить любое желаемое расширение и никакого расширения вообще. Только для целей тестирования, чтобы OP мог видеть, что на самом деле находится внутри файла. – eocron

+0

Конечно, вы можете. Вы можете назвать это «ThisFileContainsNoNumbers.txt». Это будет просто преднамеренно вводить в заблуждение. –

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