в одном из моих классов у меня есть подпрограмма, которая читает и записывает массив типа 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) Меня в первую очередь мотивирует желание повысить производительность; Бои BigInteger даже лучше, чем десятичные, если вообще?