我試過你的代碼 - 寫入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'塊中。 –