使用SequenceFile儲存BytesWritable型別時要注意
將office檔案轉為byte[] -> bytesWritable存入SquenceFile中,取出資料時發現檔案打不開報錯,列印出儲存前byte[]和取出後的byte[]長度一看,發現長度不同,後者增加不少。
原因:
BytesWritable,使用這個型別非常容易犯錯誤。當你把一堆byte[]資料儲存到BytesWritable後,透過BytesWritable.getBytes()再讀到的資料並不一定是原資料,可能變長了很多,這是因為BytesWritable採用了自動記憶體增長演算法,你儲存的資料長度為size時,它可能將資料儲存到了長度為capacity(capacity>size)的buffer中,這時候,你透過BytesWritable.getBytes()得到的資料最後一些字元是多餘的,如果裡面儲存的是protocolbuffer序列化後的字串,則無法反序列化,這時候可以使用BytesWritable.setCapacity (value.getSize())將後面多餘空間剔除掉。或者記住原byte[]的長度,取出後進行擷取。
原因:
BytesWritable,使用這個型別非常容易犯錯誤。當你把一堆byte[]資料儲存到BytesWritable後,透過BytesWritable.getBytes()再讀到的資料並不一定是原資料,可能變長了很多,這是因為BytesWritable採用了自動記憶體增長演算法,你儲存的資料長度為size時,它可能將資料儲存到了長度為capacity(capacity>size)的buffer中,這時候,你透過BytesWritable.getBytes()得到的資料最後一些字元是多餘的,如果裡面儲存的是protocolbuffer序列化後的字串,則無法反序列化,這時候可以使用BytesWritable.setCapacity (value.getSize())將後面多餘空間剔除掉。或者記住原byte[]的長度,取出後進行擷取。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29754888/viewspace-1330097/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【MySQL】時間型別儲存格式選擇MySql型別
- Oracle 儲存型別Oracle型別
- mysql儲存日期使用什麼型別MySql型別
- 字元型別的字元儲存與位元組儲存字元型別
- 建立NFS型別的儲存NFS型別
- 在 jdon 框架中使用日期型別時要注意的問題框架型別
- MYSQL 資料型別儲存-數值型MySQL 資料型別
- Block型別及儲存區域BloC型別
- Oracle Lob型別儲存淺析Oracle型別
- 資料庫儲存時間到底該用什麼型別?資料庫型別
- Oracle基本資料型別儲存格式淺析——RAW型別Oracle資料型別
- SAP EWM - 儲存型別 - 入庫控制型別
- redis-4.資料儲存型別Redis型別
- MYSQL-資料型別儲存-DATEMySql資料型別
- Oracle基本資料型別儲存格式淺析(五)——RAW型別Oracle資料型別
- 測試使用字串型別要注意的地方字串型別
- PHP memcached 各種資料型別儲存PHP資料型別
- 【精】C語言之變數儲存型別C語言變數型別
- 轉摘_儲存型別與連線方式型別
- oracle資料型別與儲存結構Oracle資料型別
- C#引用型別和值型別在堆、棧中的儲存C#型別
- Oracle基本資料型別儲存格式淺析(四)——ROWID型別Oracle資料型別
- Oracle基本資料型別儲存格式淺析(三)——日期型別(一)Oracle資料型別
- Oracle基本資料型別儲存格式淺析(三)——日期型別(二)Oracle資料型別
- Oracle基本資料型別儲存格式淺析(三)——日期型別(三)Oracle資料型別
- Oracle基本資料型別儲存格式淺析(三)——日期型別(四)Oracle資料型別
- Golang的值型別和引用型別的範圍、儲存區域、區別Golang型別
- MySQL儲存過程使用if子查詢判斷需要注意MySql儲存過程
- 作用域、連結屬性和儲存型別型別
- HDU 4548美素數(簡單題 儲存結果時需要注意不要超時)
- 儲存過程呼叫其他模式的儲存過程需要注意的地方儲存過程模式
- JavaWeb——JDBC八股文、JSBC使用儲存過程、儲存函式、處理CLOB/BLOB型別JavaWebJDBCJS儲存過程儲存函式型別
- CQRS時是否使用儲存庫模式嗎?模式
- InnoDB儲存引擎鎖機制(二、 鎖的型別)儲存引擎型別
- 關於MYSQL中FLOAT和DOUBLE型別的儲存MySql型別
- 如何檢視mysql中表的儲存引擎型別薦MySql儲存引擎型別
- Oracle基本資料型別儲存格式淺析[zt]Oracle資料型別
- 使用不含萬用字元的like運算子遇到char型別的欄位時要注意!字元型別