有人能帮我把byteswritable转换成byte[]吗。如果我使用value.getbytes(),其中value是byteswritable的,我会得到额外的字节。谢谢
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() 因为它需要一个字节数组和一个长度。
getLength()
Arrays.copyOf()
1条答案
按热度按时间9wbgstp71#
问题是byteswritable包含字节数组和长度。你必须把这些结合起来使用。下面是我编写的一个小单元测试,它向您展示了正在发生的事情:
打印出来:
所以您可以看到byteswritable设置了两次,第一次设置的字节集更长。打印出字节数组的长度表明内部字节数组的长度没有减少,而是保持较大。因此,你必须使用
getLength()
方法来确定byteswritable中有多少字节是有效的。在我使用的单元测试中Arrays.copyOf()
因为它需要一个字节数组和一个长度。