我正在尝试使用请求响应来填充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”字符。我该如何修剪它们?由于我将需要它来处理二进制文件,我如何安全地删除结尾并且只有纯粹的响应数组?谢谢!
答案 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
个实例(尽管Close
为Stream
执行此操作,我建议在两个中的一个中调用Dispose
的一致性方式:明确地或如上面的代码所示,隐式使用using
构造)。