HttpWebResponse + Stream.Read,最后添加空字符

时间:2012-02-27 16:06:03

标签: c# null httpwebresponse

我正在尝试使用请求响应来填充byte []数组,而不需要任何额外的垃圾数据。

这是我获取数据的方式:

using (Stream MyResponseStream = hwresponse.GetResponseStream())
{
    byte[] MyBuffer = new byte[4096];
    int BytesRead;

    while (0 < (BytesRead = MyResponseStream.Read(MyBuffer, 0, MyBuffer.Length)))
    {
        ByteArrayToFile("request.txt", MyBuffer);
    }
}

我使用'ByteArrayToFile'功能查看已收到的数据。

public void ByteArrayToFile(string _FileName, byte[] _ByteArray)
{
    System.IO.FileStream _FileStream = new System.IO.FileStream(_FileName, System.IO.FileMode.Append, System.IO.FileAccess.Write);
    _FileStream.Write(_ByteArray, 0, _ByteArray.Length);
    _FileStream.Close();
}

我将请求写入文件,但最后添加了很多“null”字符。我该如何修剪它们?由于我将需要它来处理二进制文件,我如何安全地删除结尾并且只有纯粹的响应数组?谢谢!

1 个答案:

答案 0 :(得分:3)

您需要使用值BytesRead,这将准确指示接收的字节数:

public void ByteArrayToFile(string _FileName, byte[] _ByteArray, int _BytesRead)
{
    using (var _FileStream = new FileStream(
      _FileName, FileMode.Append, FileAccess.Write))
    { 
        _FileStream.Write(_ByteArray, 0, _BytesRead);
    }
}

否则,您将写出一个长度为X的数组,该数组仅填充了Y个元素,导致数组中的许多“未使用”元素也被写出。缓冲区中还有可能存在过时的数据,这意味着错误信息也可能最终被写入下一次写入。

完成后你也应该处理FileStream个实例(尽管CloseStream执行此操作,我建议在两个中的一个中调用Dispose的一致性方式:明确地或如上面的代码所示,隐式使用using构造)。