在我的一个类(class)中,我有一个读取和写入 Decimal 类型数组的例程(使用 BinaryReader
/BinaryWriter
的 ReadDecimal()
和 Write()
方法,即:
BinaryReader inputReader = new BinaryReader(File.OpenRead(BaseFilePath));
for (int x = 0; x < 6; x++) {
for (int y = 0; y < m_Codes[x].GetLength(0); y++) {
for (int z = 0; z < m_Codes[x].GetLength(1); z++) {
m_Codes[x][y, z] = inputReader.ReadDecimal();
}
}
}
和
for (int x = 0; x < 6; x++) {
for (int y = 0; y < m_Codes[x].GetLength(0); y++) {
for (int z = 0; z < m_Codes[x].GetLength(1); z++) {
outputWriter.Write(m_Codes[x][y, z]);
}
}
}
.. 如您所见,在设计时只有第一个维度是已知的,其他维度在运行时会有所不同。
在一个完美的世界中,我会将 ReadDecimal()
替换为 ReadBigInteger()
和类似的书写方法,但似乎不支持流类;我猜这是因为 BigInteger 可以是任意长度。
关于我能想到的最好的事情是“手工编码”BigInteger,将其转换为 byte[]
数组,然后写入该数组的长度,然后将每个字节写入数组本身(并反向读取它)
两个问题:
1) 这是更好的方法吗?
2) 我的主要动机是提高绩效; boes BigInteger 甚至比 Decimal 表现得更好,如果有的话?
最佳答案
有一种相当简单的方法:调用 BigDecimal.ToByteArray
序列化,以及 BigDecimal(byte[])
反序列化时的构造函数。不可否认,这最终会复制数据,但我仍然希望它相当快。
你更关心序列化性能还是算术性能?
至于 BigInteger
和 decimal
之间的任何速度差异 - 您应该针对您实际想要执行的操作对其进行测试,注意它们的行为会有所不同(例如除法3 x 2 显然会为每种类型给出不同的答案)。
关于c# - 如何从文件读取/写入 C# BigIntegers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6799098/