Hadoop中文本和字符串之间的区别

时间:2013-11-08 04:35:00

标签: string text hadoop

Hadoop框架中org.apache.hadoop.io.Textjava.lang.String之间有什么区别?

为什么他们不能使用String而不是引入新的Text类?

我调查了差异,发现它与编码格式有关;但是我还不明白。

有人可以解释这些差异(例如,如果适用)?

1 个答案:

答案 0 :(得分:20)

Text对象的二进制表示是一个包含的可变长度整数 字符串的UTF-8表示中的字节数,后跟UTF-8 字节本身。

Text是UTF8类的替代品,已被弃用 因为它不支持编码超过32,767字节的字符串,因为 它使用了Java修改过的UTF-8。

此外,Text使用标准的UTF-8,这使得与其他理解UTF-8的工具交互操作变得更加容易。

以下是与String相关的一些差异:

<强>索引: 由于强调使用标准的UTF-8,因此存在一些差异 Text和Java String类之间。 Text类的索引是根据编码字节序列中的位置,而不是字符串中的Unicode字符或Java char代码单元(就像String一样)。

例如,charAt()返回一个表示Unicode代码点的int,与 返回char的字符串变体。

<强>迭代: 通过使用byte,迭代Text中的Unicode字符变得复杂 索引的偏移,因为你不能只增加索引。

<强>可变的: 与String的另一个区别是Text是可变的(就像Hadoop中的所有可写实现一样,除了NullWritable,它是一个单例)。你可以重用一个 通过调用其中一个set()方法来实现文本实例。

求助于字符串:

Text没有像操作字符串那样丰富的API java.lang.String,因此在许多情况下,您需要将Text对象转换为String。 这是通过常规方式使用toString()方法完成的:

有关详细信息,请参阅权威指南。