解析与序列化

时间:2011-01-20 03:58:28

标签: c# parsing

我有一个格式为

的文件
1 4298 3598 39980 58903
39 3598 395 395 3598 3598

每条线上只有一堆数字(32位以内的最大数字符合int范围)。

我当前的代码必须每次都解析它,首先将行拆分为字符串数组,然后将每个字符串转换为int。是否有更快的方法通过序列化或切断大部分解析的东西,因为我必须多次遍历同一个文件。换句话说,我很乐意对文件进行预处理。

4 个答案:

答案 0 :(得分:1)

为什么不以二进制格式存档?如果您只是尝试获取数值,则完全不需要String转换。此时读入四个字节,并通过按位运算使用它们创建一个整数。序列化是一种默认机制,旨在为程序员提供一种存储对象的简便方法,但精心规划的文件格式可以更容易,更快地解析。

答案 1 :(得分:0)

如果数据是静态的而不是非常大,您可能需要考虑将其转换为源代码并将其编译到您的程序/系统中。

答案 2 :(得分:0)

序列化就是获取一个对象的内存映像,并将字节传入或读出。因此,除非您可以强制List<int>具有该格式,否则序列化将无法帮助您。

答案 3 :(得分:0)

如果您不介意放弃人类可读性,可以将每个int编码为文件中的char。您可以使用Convert.ToChar(Int32)和Convert.ToInt32(char)进行转换。如果int的char表示不是有效字符,您需要测试性能并确保不会遇到问题。