有人可以帮助我将BytesWritable转换为byte []。如果我使用value.getBytes()(其中value是BytesWritable),则会得到其他字节。
谢谢
最佳答案
您遇到的问题是BytesWritable包含一个字节数组和一个长度。您必须将它们组合使用。这是我写的一个小单元测试,向您显示发生了什么:
@Test
public void testBytesWritable() {
BytesWritable bw = new BytesWritable();
Text t1 = new Text("ABCD");
bw.set(t1.getBytes(), 0, t1.getLength());
System.out.println("Size: " + bw.getBytes().length);
Text t2 = new Text("A");
bw.set(t2.getBytes(), 0, t2.getLength());
System.out.println("Size: " + bw.getBytes().length);
byte[] newArray = Arrays.copyOf(bw.getBytes(), bw.getLength());
System.out.println("Size: " + newArray.length);
}
打印输出:
Size: 6
Size: 6
Size: 1
因此,您可以看到BytesWritable设置了两次,第一次是使用更长的字节集。仅打印字节数组的长度表明内部字节数组的长度没有减少,而是保持很大。因此,您必须使用
getLength()
方法来确定BytesWritable中有多少字节有效。在单元测试中,我使用Arrays.copyOf()
来获取正确的字节,因为它需要一个字节数组和一个长度。