如何将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()返回的长度。