未知長度二進位製流的讀取

2021-08-25 10:20:24 字數 1106 閱讀 1466

採用第三方工具處理網路流的時候,會面臨一些問題,歸納如下:

1、二進位製流的開啟

很簡單,使用popen、pclose即可。windows平台下則採用_popen, _pclose。標頭檔案都是stdio.h

例如:2、二進位製流的讀取

fread的函式原型為:

/* * block_len: 表示每個結構的大小 * nitem: 結構個數。 nitem*block_len即為本次期望讀取的位元組數 * 返回值: 理想情況下四環nitem,即讀入了多少個結構。不過問題也出在這裡:如果期望讀入的總數不是block_len的整數倍呢? * int fread(void *buf, int block_len, int nitem, file*fp);

這裡,網友提供了乙個很好的方法,並且進行了初步的評測:

"這個問題解決了,我將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中的討論,很容易獲得二進位制長度,例如:

while(!feof(fp))

4、如何探測檔案流結束

如3中所示,呼叫函式feof()咯~

以乙個例子總結一下,該例子利用curl來讀取baidu首頁的二進位製流並以1024位元組為單位逐次列印到螢幕上:

#include int main() while(!feof(fp)) printf("ftell=%d/n", total); _pclose(fp); }

php讀取二進位制 php讀取二進位製流

將php資料轉換為二進位制資料 string pack string format mixed args mixed 將二進位制資料轉換為php資料 array unpack string format,string data format a nul padded string a nul 字串填...

Buffered流 二進位制

bufferedreader類是reader類的子類 bufferedreader類帶有緩衝區按行讀取內容的readline 方法 reader類常用方法 int read int read byte c read char c,int off,int len void close 子類buffer...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...