青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

馭風萬里無垠

STL Binary Stream 和 Container 數據交互的小細節

偶然發現一個用了STL很久都沒有發現的問題,特記之。


事情的起因很簡單,需要做一些簡單的重構,將原來讀文件得到二進制緩沖數據的部分分離開,拉一個單獨的API,接收文件二進制內容的緩沖區參數;估計很多人都會做這樣的事情,將一個小程序變得更有用,不得不把300行的main拆開來,露幾個函數來用。

其他的部分都如想象般的簡單,唯獨在測試原有讀文件調用新接口的地方卡住了。
原來的邏輯如此這般:

FILE* fin = open("file.bin", "rb");
if (fin == NULL)
{
    exit(-1);
}

unsigned char buf[65536] = {0};
char ch;
int i = 0;
while ( (ch = fgetc(fin)) != EOF)
{
    buf[i++] = ch;
    if (i >= sizeof(buf))
        exit(-2);
}

//..................
改寫后的調用接口如下:
typedef std::vector<unsigned char> BinaryBufferType;
int SomeFunc(BinaryBufferType& buf, ...)

 

為了完成接口測試并且還原原有功能,需要將文件內容讀入到一個vector中來測試。初始的想法如下:

ifstream ifs("file.bin", ios::in|ios::binary);
if (!ifs.good())
{
    exit(-1);
}

typedef std::istream_iterator<char> FsIt;
BinaryBufferType buf;
std::copy(FsIt(ifs), FsIt(), std::back_inserter(buf));

 

除了出錯檢查,重要的部分就是一個copy調用將STL流的內容自動拷貝到vector里邊;這是一個很典型的例子,乃至SGI的文檔里邊關于copy算法的例子就是這樣的。

問題是,這個代碼卻是有問題的,和上邊的C代碼并不等價,實際測試的過程中,發現居然漏掉了3個Byte的數據。

頓時感覺很奇怪了,馬上GDB跟了下,由于數據太多,一下子沒看出來那個出書丟了(后來發現是0c);想想是否與binary方式有關呢,已經采用binary方式讀入了呀?

 

Google一番才發現有人遇到了同樣的問題,原來 stream_iterator 默認采用的是formatted I/O方式處理數據,所以某些東西會被跳過。

如果需要拷貝二進制數據,該采用如下的法子:

typedef std::istreambuf_iterator<char> FsIt;
BinaryBufferType buf;
std::copy(FsIt(buf.rdbuf()), FsIt(), std::back_inserter(buf));
 
就是這點小小的差別,以前一直被忽略了…… 浪費了不少時間,當時如果搜索istreambuf_iterator,似乎能發現Effective STL里邊講述過這個,可惜當時看的時候,很快過去,
居然一點印象都沒有?
真是“絕知此事要躬行”了。

 

posted on 2009-08-27 21:09 skyscribe 閱讀(602) 評論(0)  編輯 收藏 引用

<2009年8月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

導航

統計

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美激情综合色| 亚洲精品一线二线三线无人区| 亚洲一区影音先锋| 亚洲国产成人av好男人在线观看| 欧美激情一区二区三区全黄 | 一区二区三区日韩精品视频| 亚洲乱码精品一二三四区日韩在线| 理论片一区二区在线| 久久激情五月激情| 久久在线免费观看视频| 免费视频一区| 亚洲精品之草原avav久久| 亚洲图色在线| 欧美另类女人| 欧美日韩www| 国产区亚洲区欧美区| 国产日韩在线看| 亚洲级视频在线观看免费1级| 亚洲毛片在线免费观看| 午夜日本精品| 亚洲黄色小视频| 亚洲一区二区三区精品在线观看| 久久国产精品电影| 亚洲精品乱码久久久久久久久| 亚洲人体影院| 久久久一区二区三区| 国产日韩欧美高清| 香港久久久电影| 一区二区日韩精品| 欧美激情综合色| 亚洲激情在线观看视频免费| 久久综合伊人77777蜜臀| 亚洲视频免费| 国产精品裸体一区二区三区| 亚洲一区影音先锋| 亚洲一区999| 国产日韩一区二区| 久久久久免费视频| 麻豆91精品| 99精品久久免费看蜜臀剧情介绍| 欧美成ee人免费视频| 久久综合久久88| 日韩一区二区电影网| 日韩天堂在线观看| 国产片一区二区| 欧美高清一区| 欧美午夜剧场| 欧美大片一区二区| 国产精品久久久久久久久久三级 | 欧美久久婷婷综合色| 亚洲一区二区av电影| 久久久99免费视频| 中文一区二区| 久久免费视频观看| 久久久精品日韩欧美| 欧美国产成人在线| 性欧美xxxx大乳国产app| 午夜精品久久久久久久久久久| 国产日韩欧美电影在线观看| 在线国产精品播放| 久久久久九九九九| 午夜视频一区在线观看| 国产精品久久久一本精品| 欧美夫妇交换俱乐部在线观看| 国产午夜精品美女毛片视频| 久久av资源网站| 欧美日韩精品免费观看视频| 蜜桃视频一区| 国产伪娘ts一区| 香蕉av777xxx色综合一区| 在线视频亚洲一区| 欧美精品 日韩| 亚洲国产国产亚洲一二三| 激情综合网激情| 欧美一区二区三区在线观看| 亚洲综合电影| 国产精品美女黄网| 性伦欧美刺激片在线观看| 久久不射2019中文字幕| 国产一区二区三区av电影| 国产专区精品视频| 麻豆精品国产91久久久久久| 久久视频国产精品免费视频在线| 亚洲韩国精品一区| 一本色道久久综合亚洲91| 国产精品一区二区久久久久| 久久网站免费| 欧美精品在欧美一区二区少妇| 亚洲一区二区三区影院| 欧美在线不卡| 一区二区动漫| 久久久国产精品一区二区三区| 亚洲乱码一区二区| 午夜精品一区二区在线观看| 亚洲国产导航| 亚洲一区欧美二区| 亚洲国产欧美精品| 亚洲天堂网在线观看| 在线观看欧美精品| 亚洲视频在线观看网站| 亚洲电影毛片| 亚洲欧美国产77777| 亚洲高清在线观看| 午夜在线视频一区二区区别| 99www免费人成精品| 久久久久一区| 香蕉精品999视频一区二区| 国产精品视频久久久| 久久综合伊人| 国产精品久久毛片a| 亚洲国产精品va| 国产日韩精品在线| 亚洲精品视频免费| 亚洲国产一区二区三区在线播| 亚洲视屏一区| 亚洲美女啪啪| 久久国产精品毛片| 亚洲激情成人在线| 国产美女精品人人做人人爽| 在线观看精品| 亚洲欧美日本国产专区一区| 日韩视频永久免费观看| 欧美在线欧美在线| 欧美在线www| 国产精品美女www爽爽爽视频| 亚洲国产高清一区二区三区| 伊人久久婷婷| 久久激情婷婷| 久久看片网站| 国产资源精品在线观看| 亚洲宅男天堂在线观看无病毒| 一本一本a久久| 欧美日韩国产色综合一二三四 | 亚洲视频大全| 久久亚洲精品中文字幕冲田杏梨| 欧美国产高清| 香蕉成人啪国产精品视频综合网| 免费不卡在线观看| 久久久久久久久岛国免费| 国产精品久久综合| 在线综合欧美| 亚洲在线观看视频| 欧美久久综合| 夜夜爽夜夜爽精品视频| 亚洲视频图片小说| 国产精品青草久久| 亚洲欧美日韩一区在线| 欧美一区二区三区视频免费播放| 国产精品自拍小视频| 欧美一区二区三区精品| 久久中文字幕导航| 亚洲国产成人久久| 国产情侣一区| 最新日韩在线| 在线免费观看欧美| 欧美日本一区| 久久久久久9999| 美日韩精品视频| 欧美激情片在线观看| 亚洲精品欧美极品| 欧美日韩国产大片| 亚洲一区视频在线| 国产精品普通话对白| 久久久久国产精品www| 国产一区二区日韩精品欧美精品| 欧美中文字幕精品| 欧美激情a∨在线视频播放| 日韩午夜av| 国产欧美精品日韩精品| 久久漫画官网| 99精品福利视频| 亚洲免费av观看| 久久久综合视频| 在线中文字幕日韩| 国语自产精品视频在线看抢先版结局| 亚洲免费观看在线观看| 午夜精品影院| 亚洲国产精品一区二区第四页av| 欧美人在线观看| 欧美一区视频| 99re视频这里只有精品| 久久天堂精品| 亚洲欧美色婷婷| 亚洲人午夜精品免费| 国产亚洲aⅴaaaaaa毛片| 欧美精品成人91久久久久久久| 性欧美video另类hd性玩具| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲综合色激情五月| 91久久综合亚洲鲁鲁五月天| 国产精品网站视频| 欧美另类极品videosbest最新版本| 欧美一级大片在线观看| 午夜视频在线观看一区| 国产精品一二一区| 在线播放不卡| 久久精品人人爽| 欧美激情导航| 午夜欧美不卡精品aaaaa| 亚洲三级色网|