采用第三方工具处理网络流的时候,会面临一些问题,归纳如下:
1、二进制流的打开
很简单,使用popen、pclose即可。Windows平台下则采用_popen, _pclose。头文件都是stdio.h
例如:
2、二进制流的读取
依然很简单,使用大家都不陌生的fread就行啦~ 不过,这里有个trick:
fread的函数原型为:
这里,网友提供了一个很好的方法,并且进行了初步的评测:
"这个问题解决了,我将fread中第二个参数和第三个参数交换了以下位置,既:nReturn = fread(buf,1,1024,file); 这样,读取元素的长度为1字节,读取1024个元素,这样nReturn的值便是实际读取的字节数。这个想法受益于一个网友的帖子,提醒了我。
我测试过了,nReturn = fread(buf,1,1024,file)与nReturn = fread(buf,1024,1,file);在操在27087718字节长的二进制文件时,测试了150次,程序运行效率基本相同,前者比后者平均节省时间大约2ms。 "
通常我总是让nitem=1,所以返回值总是0或者1。为了获得真正读入的字节数,可以让block_len总是为1,nitem为期望读入的字节数。好方法!关于性能,可以再亲自测试一下。
3、获取二进制流的长度
基于2中的讨论,很容易获得二进制长度,例如:
4、如何探测文件流结束
如3中所示,调用函数feof()咯~
以一个例子总结一下,该例子利用curl来读取baidu首页的二进制流并以1024字节为单位逐次打印到屏幕上: