二进制Writer返回null的字节数组

时间:2011-09-23 11:16:24

标签: c# binarywriter

我正在使用MRIM(Mail.Ru代理)协议。 MRIM是一个二进制协议,所以为了使数据成为二进制,我使用的是BinaryWriter类。这是代码:

    private byte[] CreateMrimPacket(ulong message) 
    { 
       byte[] binaryData; 
        using (MemoryStream ms = new MemoryStream()) 
        { 
            using (BinaryWriter bw = new BinaryWriter(ms)) 
            { 
                bw.Write(CS_MAGIC); //CS_MAGIC is a constant that doesn't equal 0
                bw.Write(PROTO_VERSION); //Same thing
                bw.Write((ulong)SeqCounter); 
                bw.Write(message); 
                bw.Write((ulong)0); 
                bw.Write((ulong)0); 
                bw.Write((ulong)0); 
                bw.Write((ulong)0); 
                bw.Write((ulong)0); 
                bw.Write((ulong)0); 
                bw.Write((ulong)0); 
                binaryData = new byte[ms.Length]; 
                ms.Read(binaryData, 0, binaryData.Length); 
            } 
        } 
        return binaryData; 
    } 

此函数返回字节数组,但所有值均为0 请帮我解决这个问题。
提前致谢

1 个答案:

答案 0 :(得分:9)

您正在写入流,将留在您编写的数据的末尾,然后从中读取。目前的位置没有数据!

可以在阅读之前使用ms.Position = 0; ...但幸运的是,它比你正在制作它更容易......只需使用:

return ms.ToArray();

MemoryStream.ToArray返回流中的所有数据,无论当前位置如何(也无论流是否关闭)。