hadoop:将byteswritable转换为byte[]

avwztpqn  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(572)

有人能帮我把byteswritable转换成byte[]吗。如果我使用value.getbytes(),其中value是byteswritable的,我会得到额外的字节。
谢谢

9wbgstp7

9wbgstp71#

问题是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() 因为它需要一个字节数组和一个长度。

相关问题