парсинг против сериализации - PullRequest
3 голосов
/ 20 января 2011

У меня есть файл в формате:

1 4298 3598 39980 58903
39 3598 395 395 3598 3598

Так что просто набор чисел в каждой строке (максимальное число в пределах 32-битного целого числа со знаком).

Мой текущий код должен анализировать это каждый раз, сначала разбивая строку на массив строк, а затем преобразовывая каждую строку в int. Есть ли более быстрый способ сделать это через сериализацию или что-то, что отсекает большую часть анализа, так как мне приходится много раз повторять один и тот же файл. Я счастлив предварительно обработать файл другими словами.

Ответы [ 4 ]

1 голос
/ 20 января 2011

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

0 голосов
/ 20 января 2011

Если вы не возражаете отказаться от читабельности, вы можете закодировать каждое целое как символ в файле.Вы можете использовать Convert.ToChar (Int32) и Convert.ToInt32 (char) для преобразования.Вы хотите проверить производительность и убедиться, что у вас не возникнет проблем, если представление типа int не является допустимым символом.

0 голосов
/ 20 января 2011

Сериализация - это получение изображения объекта из памяти и передача или чтение байтов из него.Поэтому, если вы не можете заставить List<int> иметь этот формат, сериализация вам не поможет.

0 голосов
/ 20 января 2011

Если данные статичны и не слишком велики, вы можете рассмотреть возможность их преобразования в исходный код и компиляции в вашу программу / систему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...