在我的一个类(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() 以及类似的编写方法,但这似乎在 Stream 类中不受支持;我猜这是因为 BigInteger 可以是任何长度。关于我能想到的最好的事情是“手工编码”BigInteger,通过将其转换为 byte[] 数组,然后写入该数组的长度,然后写入数组本身中的每个字节(并执行相反的操作以读取它)两个问题:1)这是更好的方法吗?2) 我的主要动机是提高绩效; boes BigInteger 的性能甚至比 Decimal 好得多,如果有的话? 最佳答案 您可以转换为字符串( BigInteger.ToSting() ),然后写入该字符串(因为 BinaryReader 和 BinaryWriter 直接支持字符串,这避免了需要自己进行任何编码/解码)。然后用 BigInteger.Parse 将其转换回来。为了解决性能问题:我认为您需要针对您感兴趣的案例进行衡量。当相对较小的值(比如 abs(value) BigInteger 的性能在 long 性能的几个数量级内(即慢不超过约 500 倍)。但是随着 BigInteger 实例变大,操作将花费更长的时间(必须操作更多位)。另一方面,decimal 应该在所有尺度上都具有相当一致的性能,但它可能比 long 在其范围交集的数字慢得多(decimal 是一种更复杂的表示:比例因子和通过计算保留实际有效数字;但对这种复杂性的影响没有直觉)。请记住:BigDecimal 是精确的——它从不循环; decimal 是近似值——数据可能会从末端脱落并被丢弃。任何一个业务问题似乎都不可能支持其中任何一个。关于c# - 如何从文件读/写 C# BigIntegers?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6799098/
10-17 02:18