对方提供一个api接口。数据流可能是gz压缩包,也可能是xml文件。
目前有些疑问
Stream resst = res.GetResponseStream();
1、执行这个以后,我应该返回什么?
如果返回byte[]数据,如果文件过大,这个会不会超?
byte[]数组的长度设置成resst.Length,就是读取了所有的流?
2、如果不能,是不是要把数据流放到二进制文件中,做成buffer,这个如何做?
3、如果是byte[],如何判断是gz压缩包,还是xml文件
4、如果做成buffer,有改如何判定呢?
Stream output = null;//这里构建一个输出文件流,也就是打开一个文件 byte[] buffer = new byte[4096]; int read = 0; Stream responeStream = res.GetResponseStream(); while((read = responseStream.Read(buffer, 0, buffer.Length)) > 0) { output.Write(buffer, 0, read); }
就这么简单。
至于是否压缩包,需要获取Response的响应头来分析。
每次读取4096
返回Stream是吗?
@roboth: 4096是4k,一个缓存大小而已,可以设置大点,也可以设置小点,不过,我没研究过设置多少最好,但4K即便不是最好也是几乎最好的(呵呵,MS就一直用这个尺寸,你也可以设置为8K、16K,但记住,一定要是2的倍数才好)。
GetResponseStream返回的一定是一个stream。
@笨笨蜗牛:
现在我这写个通用的方法获取数据流,做适当转化,返回。
如果返回 byte[]字节数据会出现溢出的情况 是吗?
能返回Stream吗?
如何通过henader判定是gz压缩包,还是xml文件呢?
@roboth: @roboth: 如果是GZ压缩,一定能通过head判断出来。 但如果不是GZ压缩,而是xml的话,假如对方是按照标准的协议处理,也能判断出来,这个判断对象就是content-type,值应该是 text/xml
@roboth: HttpWebRequest 请求数据,每次返回长度都不一样