Я попробовал ваш код - запись в FileStream
- и я всегда получаю ноль байтов, записанных в поток. Я не знаю, почему WriteTo
блокируется на NextWorkStream
, когда нечего писать, но это может быть проблемой
Когда я извлекаю байты из MemoryStream
и записываю их непосредственно в поток, все работает, например. (Я создаю двоичный форматер в подпрограмме, кажется, у вас уже есть форматер).
public static void SerializeRO(Stream stream, object ro)
{
MemoryStream serializedObjectStream = new MemoryStream();
var f = new BinaryFormatter();
f.Serialize(serializedObjectStream, ro);
MemoryStream writeStream = new MemoryStream();
BinaryWriter bw = new BinaryWriter(writeStream);
var bytes = serializedObjectStream.ToArray();
bw.Write(bytes.Length);
bw.Write(bytes);
var bwBytes = writeStream.ToArray();
stream.Write(bwBytes, 0, bwBytes.Length);
bw.Close();
}
Однако я бы сделал это так с одним MemoryStream
и записал бы прямо в stream
, если только я не знаю что-то о NetworkStream
(это, конечно, закроет stream
, что, возможно, не то, что хочешь)
public static void SerializeRO(Stream stream, object ro)
{
byte[] allBytes;
using (var serializedObjectStream = new MemoryStream())
{
var f = new BinaryFormatter();
f.Serialize(serializedObjectStream, ro);
allBytes = serializedObjectStream.ToArray();
}
using (var bw = new BinaryWriter(stream))
{
bw.Write(allBytes.Length);
bw.Write(allBytes);
}
}
Версия, которая не закроет ваш NetworkStream (только не помещайте двоичный модуль записи в оператор using или Close()
it)
public static void SerializeRO(Stream stream, object ro)
{
byte[] allBytes;
using (var serializedObjectStream = new MemoryStream())
{
var f = new BinaryFormatter();
f.Serialize(serializedObjectStream, ro);
allBytes = serializedObjectStream.ToArray();
}
var bw = new BinaryWriter(stream)
bw.Write(allBytes.Length);
bw.Write(allBytes);
}