String Hadoop中文本和字符串的区别

String Hadoop中文本和字符串的区别,string,text,hadoop,String,Text,Hadoop,hadoop框架中的org.apache.hadoop.io.Text和java.lang.String之间有什么区别 为什么他们不能使用String而不是引入一个新的Text类 我调查了差异,发现它与编码格式有关;但是我还不明白 有人能解释一下区别吗(如果适用,请举例说明)?文本对象的二进制表示是一个可变长度的整数,包含 字符串的UTF-8表示形式中的字节数,后跟UTF-8 字节本身 Text是UTF8类的替代品,该类已被弃用 因为它不支持编码超过32767字节的字符串,而且 它使用了Java

hadoop框架中的
org.apache.hadoop.io.Text
java.lang.String
之间有什么区别

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

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


有人能解释一下区别吗(如果适用,请举例说明)?

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

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

此外,文本使用标准UTF-8,这使得它可能更容易与理解UTF-8的其他工具交互操作

以下是与字符串功能相关的一些简要差异:

索引: 由于其强调使用标准UTF-8,因此存在一些差异 在文本和Java字符串类之间。文本类的索引是根据编码字节序列中的位置,而不是字符串中的Unicode字符或Java 字符代码单位(与字符串相同)

例如,
charAt()
返回字符的字符串变量

迭代: 由于使用字节,在文本中的Unicode字符上进行迭代变得复杂 索引的偏移量,因为您不能只是增加索引

可变: 字符串的另一个区别是文本是可变的(与Hadoop中的所有可写实现一样,除了NullWritable,它是一个单例)。您可以重用 通过对文本实例调用set()方法之一

使用字符串:

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


有关更多详细信息,请阅读《权威指南》。

文本类的主要用途是它提供序列化和反序列化接口,在字符串功能有限的情况下通过网络发送数据时提供帮助。简言之,它是具有额外功能的字符串。请查看此处,并提供有关差异的示例。如何将
java.lang.String
转换为
Text
?找到它,
val t=newtext
。顺便说一句,我在斯卡拉