2016-01-21 132 views
0
if (value instanceof BytesWritable) 
{ 
    BytesWritable b = (BytesWritable) value; 
    byte[] bytes = b.getBytes(); 
    System.out.println(bytes.length); 
    FileUtils.writeByteArrayToFile(
    new File(dstFolder, key.toString()), bytes); 
} 

我的BytesWritable對象b具有正確的大小269712(它是一個.exe文件)。當我打電話的getBytes(),陣列字節具有5764153.長度所以然後,當我嘗試寫字節與writeByteArrayToFile一個輸出文件中,該含量大於在我BytesWritable對象的內容不同b如何將BytesWritable內容寫入文件?

我的錯誤或將BytesWritable內容寫入文件的正確方法是什麼?

我正在使用hadoop-core-1.2.1.jar。

回答

0

BytesWritable在更改長度後不縮小字節數組,因此當您調用getBytes()時,您可能會在感興趣的內容後得到一些垃圾。在以後的hadoop版本中,您可以調用copyBytes()直到當前長度的字節。

在早期版本中,您必須從getBytes()返回的字節數組複製getLength()返回的長度。