【问题标题】:Binary Writer returns byte array of nullBinary Writer 返回 null 的字节数组
【发布时间】:2011-09-23 11:16:23
【问题描述】:

我正在使用 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。
请帮我解决这个问题。
提前致谢

【问题讨论】:

    标签: c# binarywriter


    【解决方案1】:

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

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

    return ms.ToArray();
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 2022-11-08
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多