使用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型別
- 建立NFS型別的儲存NFS型別
- Block型別及儲存區域BloC型別
- 資料庫儲存時間到底該用什麼型別?資料庫型別
- 使用紋理的RGBA通道儲存float型別數值型別
- JavaScript中的資料型別-儲存差別JavaScript資料型別
- SAP EWM - 儲存型別 - 入庫控制型別
- redis-4.資料儲存型別Redis型別
- Oracle基本資料型別儲存格式淺析——RAW型別Oracle資料型別
- 使用django-treebeard實現樹型別儲存與編輯Django型別
- JavaWeb——JDBC八股文、JSBC使用儲存過程、儲存函式、處理CLOB/BLOB型別JavaWebJDBCJS儲存過程儲存函式型別
- C#引用型別和值型別在堆、棧中的儲存C#型別
- Golang的值型別和引用型別的範圍、儲存區域、區別Golang型別
- Mysql - 如何決定用 datetime、timestamp、int 哪種型別儲存時間戳?MySql型別時間戳
- [20191219]oracle timestamp資料型別的儲存.txtOracle資料型別
- 作用域、連結屬性和儲存型別型別
- InnoDB儲存引擎鎖機制(二、 鎖的型別)儲存引擎型別
- [20190930]oracle number型別儲存轉化指令碼.txtOracle型別指令碼
- [20191003]oracle number型別儲存轉化指令碼.txtOracle型別指令碼
- [20191013]oracle number型別儲存轉化指令碼.txtOracle型別指令碼
- Mybatis讀取和儲存json型別的資料MyBatisJSON型別
- CQRS時是否使用儲存庫模式嗎?模式
- [Hive]建表例項與引數解釋——自定義表的儲存格式(textfile、sequencefile、refile)Hive
- sublime設定儲存新檔案時的預設檔案型別(字尾名)型別
- 伺服器儲存資料要注意什麼伺服器
- mysql之json型別與文字儲存json的優勢MySqlJSON型別
- [20241009]oracle timestamp with time zone資料型別的儲存.txtOracle資料型別
- go 把時間儲存到 MongoDB , 時間是 time 型別MongoDB型別
- 使用MongoDB儲存時間序列資料 - DACMongoDB
- 聚焦資料時代新儲存需求,浪潮儲存的新儲存之道
- 如何在MapReduce中使用SequenceFile資料格式?
- 加速全球數字化轉型,HPE智慧儲存平臺引領新時代儲存變革
- [20221012]簡單探究nvarchar2資料型別儲存.txt資料型別
- Redis(一):基本資料型別與底層儲存結構Redis資料型別
- Redis常用資料型別及其儲存結構(原始碼篇)Redis資料型別原始碼
- QVariant在Qt6.x中儲存自定義型別時無需使用者在使用Q_DECLARE_METATYPE進行註冊QT型別
- 伺服器資料儲存需要注意什麼伺服器
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- 杉巖:淺談物件儲存和塊儲存區別物件