首页新闻找找看学习计划

C# 如何把数据流存储到二进制文件

0
悬赏园豆:20 [已解决问题] 解决于 2012-06-28 17:17

对方提供一个api接口。数据流可能是gz压缩包,也可能是xml文件。

目前有些疑问

Stream resst = res.GetResponseStream();

1、执行这个以后,我应该返回什么?

如果返回byte[]数据,如果文件过大,这个会不会超?

byte[]数组的长度设置成resst.Length,就是读取了所有的流?

2、如果不能,是不是要把数据流放到二进制文件中,做成buffer,这个如何做?

 

 

3、如果是byte[],如何判断是gz压缩包,还是xml文件

4、如果做成buffer,有改如何判定呢?

roboth的主页 roboth | 初学一级 | 园豆:28
提问于:2012-06-25 17:51
< >
分享
最佳答案
0
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的响应头来分析。

收获园豆:20
无之无 | 大侠五级 |园豆:5085 | 2012-06-25 17:56

每次读取4096

返回Stream是吗?

roboth | 园豆:28 (初学一级) | 2012-06-25 17:58

@roboth: 4096是4k,一个缓存大小而已,可以设置大点,也可以设置小点,不过,我没研究过设置多少最好,但4K即便不是最好也是几乎最好的(呵呵,MS就一直用这个尺寸,你也可以设置为8K、16K,但记住,一定要是2的倍数才好)。

GetResponseStream返回的一定是一个stream。

无之无 | 园豆:5085 (大侠五级) | 2012-06-25 18:01

@笨笨蜗牛: 

现在我这写个通用的方法获取数据流,做适当转化,返回。

如果返回 byte[]字节数据会出现溢出的情况 是吗?

 

能返回Stream吗?

roboth | 园豆:28 (初学一级) | 2012-06-25 18:08

如何通过henader判定是gz压缩包,还是xml文件呢?

roboth | 园豆:28 (初学一级) | 2012-06-25 18:09

@roboth: @roboth: 如果是GZ压缩,一定能通过head判断出来。 但如果不是GZ压缩,而是xml的话,假如对方是按照标准的协议处理,也能判断出来,这个判断对象就是content-type,值应该是 text/xml

无之无 | 园豆:5085 (大侠五级) | 2012-06-25 22:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册