hadoop文本是可变的

kuarbcqp  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(299)

我无法理解他那段代码的逻辑:

Text text = new Text("hadoop");
    System.out.println(text.getLength());
    System.out.println(text.getBytes().length);
    text.set(new Text("pig"));
    System.out.println(text.getLength());
    System.out.println(text.getBytes().length);

为什么最后的打印报表 6 而不是 3 ? 请解释-完全困惑。

hsvhsicv

hsvhsicv1#

文本由字节数组支持以保存其实际值。更新文本值时,如果新值适合当前字节数组(否则将创建新字节数组),则会覆盖字节数组的内容,而不是替换整个字节数组对象。在您的示例中,使用值“hadoop”初始化文本,该值需要长度为6的字节数组。将新值设置为“pig”时,“pig”将复制到长度为6的现有字节数组中,即,文本不会为此创建长度为3的新字节数组。我假设,字节数组被重用以减少对象示例化的数量并减少垃圾收集器的压力。
text.getbytes()的javadocs说明:
返回原始字节;但是,只有getlength()以下的数据才有效。如果需要返回的数组正好是数据的长度,请使用copybytes()。

相关问题