如何将BytesWritable内容写入文件?

问题描述:

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。

BytesWritable在更改长度后不缩小字节数组,因此当您调用getBytes()时,您可能会在感兴趣的内容后得到一些垃圾。在以后的hadoop版本中,您可以调用copyBytes()直到当前长度的字节。

在早期版本中,您必须从getBytes()返回的字节数组复制getLength()返回的长度。