gpt4 book ai didi

c# - 如何从文件读取/写入 C# BigIntegers?

转载 作者:太空狗 更新时间:2023-10-30 00:56:48 26 4
gpt4 key购买 nike

在我的一个类(class)中,我有一个读取和写入 Decimal 类型数组的例程(使用 BinaryReader/BinaryWriterReadDecimal()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[])反序列化时的构造函数。不可否认,这最终会复制数据,但我仍然希望它相当快。

你更关心序列化性能还是算术性能?

至于 BigIntegerdecimal 之间的任何速度差异 - 您应该针对您实际想要执行的操作对其进行测试,注意它们的行为会有所不同(例如除法3 x 2 显然会为每种类型给出不同的答案)。

关于c# - 如何从文件读取/写入 C# BigIntegers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6799098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com