使用SequenceFile儲存BytesWritable型別時要注意

破棉襖發表於2014-11-12
      將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[]的長度,取出後進行擷取。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29754888/viewspace-1330097/,如需轉載,請註明出處,否則將追究法律責任。

相關文章