我试过你的代码 - 写入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()
吧)
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);
}
为什么你不能只做Formatter.Serialize(stream,ro)?为什么你需要2个MemoryStreams? –
你还需要将你的流放入'using'块中。 –