Здравствуйте, Аноним, Вы писали:
А>Почему нельзя просто записать признак null ввиде bool значения, и явно указать длину массива? Это особенность Rsa?
Что значит "записать признак null ввиде bool значения" я, признаться, не понял, как и то, зачем они так записывают ноль. А длину так пишут, чтобы гарантировать little-endian формат числа независимо от текущей аппаратной платформы.
А>Почему нельзя просто записать признак null ввиде bool значения, и явно указать длину массива? Это особенность Rsa?
К RSA данный код не имеет никакого отношения. Единственное, что он делает, это записывает длину массива в файл. Длина массива число типа int (4 байта), FileStream.WriteByte может записать только один байт.
Ну а дальше всё просто. Если длина массива 0 или null, то записываем 4 нулевых байта, что равносильно записи числа int, равного 0. Если длина массива не 0, то разбиваем длину на 4 байта и записываем их поочередно.
Код:
берет очередной байт числа и записывает его в файл.
ICQ: 326084932
Re[2]: Сериализация RSAParameters
От:
Аноним
Дата:
04.08.10 11:09
Оценка:
Здравствуйте, Niswn, Вы писали:
N>К RSA данный код не имеет никакого отношения. Единственное, что он делает, это записывает длину массива в файл. Длина массива число типа int (4 байта), FileStream.WriteByte может записать только один байт.
Ок, спасибо за ответы. Я со своими extension методами совсем из жизни выпал, что в поток можно писать лишь байты. У меня код переписанный выглядит так:
private static void WriteByteArray(Stream stream, byte[] array)
{
if (stream == null)
throw new ArgumentNullException("stream");
stream.Write(array == null);
if (array == null)
return;
stream.Write(array);
}
private static byte[] ReadByteArray(Stream stream)
{
if (stream == null)
throw new ArgumentNullException("stream");
var isNull = stream.Read<bool>();
if (isNull)
return null;
return stream.Read<byte[]>();
}