Thrift用二進制流傳輸文件的坑

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>來存字節流

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章