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

Cra*_*ker 2 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; 
    } 
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 10

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

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

return ms.ToArray();
Run Code Online (Sandbox Code Playgroud)

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