gpt4 book ai didi

java - Hadoop:将 BytesWritable 转换为 byte[]

转载 作者:可可西里 更新时间:2023-11-01 16:38:09 25 4
gpt4 key购买 nike

谁能帮我把 BytesWritable 转换成 byte[]。如果我使用值是 BytesWritable 的 value.getBytes(),我会得到额外的字节。

谢谢

最佳答案

您遇到的问题是 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() 来获取正确的字节,因为它需要一个字节数组和一个长度。

关于java - Hadoop:将 BytesWritable 转换为 byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47552545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com