Thrift用二進制流傳輸文件遇到的問題
場景:以C爲服務器,用thrift通過調用C的接口將文件讀取到字節流中然後用java獲取存到本地後再讀取做一些事情。(thrift中用的binary與char*相對)
遇到的問題
在字節流讀文件時fread的結果是正確的(和文件長度相等),但是在java端接收和輸出就只有前面的幾個字節,然後我一直以爲fread的問題,沒有將數據讀到char*
中,如圖(c和java輸出的都是它),我2M的文件只能讀出這些數據,char*
轉string也不行
然後用WinHEX打開文件,發現似乎是00的問題,有可能讀到00就不讀了。。。
然後我就用循環只讀1000個字節然後依次賦值輸出發現是能讀到後面數據的
然後回想了一下,得出結論:
%s輸出遇到00就當作是結束了,後面的就不管了,char轉string也是,thrift中binary數據類型也是,真的神坑
解決辦法
我覺得可以用thrift的list<byte>
來存字節流