两者有什么区别 org.apache.hadoop.io.Text 以及 java.lang.String 在hadoop框架中?为什么他们不能用 String 而不是引进新的 Text 上课?我调查了这种差异,发现它与编码格式有关;但是我还不明白。有人能解释一下这些区别吗(如果适用,举例说明)?
org.apache.hadoop.io.Text
java.lang.String
String
Text
7ajki6be1#
文本对象的二进制表示是一个可变长度整数,包含字符串的utf-8表示中的字节数,后跟utf-8字节本身。text是utf8类的替代品,utf8被弃用,因为它不支持编码超过32767字节的字符串,而且它使用了java修改过的utf-8。此外,文本使用标准utf-8,这使得与理解utf-8的其他工具进行交互操作可能更容易。以下是与字符串功能相关的一些简单差异:索引:由于它强调使用标准utf-8,text和javastring类之间存在一些差异。text类的索引是根据编码字节序列中的位置来建立的,而不是字符串中的unicode字符或javachar代码单元(就像字符串那样)。例如, charAt() 返回表示unicode码位的int,与返回char的字符串变量不同。迭代:在文本中迭代unicode字符由于使用字节偏移量进行索引而变得复杂,因为不能只增加索引。mutable:与string的另一个区别是文本是可变的(与hadoop中的所有可写实现一样,除了nullwritable,它是一个单例)。可以通过对文本示例调用set()方法之一来重用该示例。使用字符串:文本没有像文本那样有丰富的api来操作字符串 java.lang.String ,因此在许多情况下,需要将文本对象转换为字符串。这是以通常的方式完成的,使用 toString() 方法:更多细节请阅读权威指南。
charAt()
toString()
1条答案
按热度按时间7ajki6be1#
文本对象的二进制表示是一个可变长度整数,包含字符串的utf-8表示中的字节数,后跟utf-8字节本身。
text是utf8类的替代品,utf8被弃用,因为它不支持编码超过32767字节的字符串,而且它使用了java修改过的utf-8。
此外,文本使用标准utf-8,这使得与理解utf-8的其他工具进行交互操作可能更容易。
以下是与字符串功能相关的一些简单差异:
索引:由于它强调使用标准utf-8,text和javastring类之间存在一些差异。text类的索引是根据编码字节序列中的位置来建立的,而不是字符串中的unicode字符或javachar代码单元(就像字符串那样)。
例如,
charAt()
返回表示unicode码位的int,与返回char的字符串变量不同。迭代:在文本中迭代unicode字符由于使用字节偏移量进行索引而变得复杂,因为不能只增加索引。
mutable:与string的另一个区别是文本是可变的(与hadoop中的所有可写实现一样,除了nullwritable,它是一个单例)。可以通过对文本示例调用set()方法之一来重用该示例。
使用字符串:
文本没有像文本那样有丰富的api来操作字符串
java.lang.String
,因此在许多情况下,需要将文本对象转换为字符串。这是以通常的方式完成的,使用toString()
方法:更多细节请阅读权威指南。