简介
在hadoop中,Writable的实现类是个庞大的家族,我们在这里简单的介绍一下常用来做序列化的一部分。
java原生类型
除char类型以外,所有的原生类型都有对应的Writable类,并且通过get和set方法可以他们的值。
IntWritable和LongWritable还有对应的变长VIntWritable和VLongWritable类。
固定长度还是变长的选用类似与数据库中的char或者vchar,在这里就不赘述了。
Text类型
Text类型使用变长int型存储长度,所以Text类型的最大存储为2G.
Text类型采用标准的utf-8编码,所以与其他文本工具可以非常好的交互,但要注意的是,这样的话就和java的String类型差别就很多了。
检索的不同
Text的chatAt返回的是一个整型,及utf-8编码后的数字,而不是象String那样的unicode编码的char类型。
@Test public void testTextIndex(){ Text text=new Text("hadoop"); Assert.assertEquals(text.getLength(), 6); Assert.assertEquals(text.getBytes().length, 6); Assert.assertEquals(text.charAt(2),(int)'d'); Assert.assertEquals("Out of bounds",text.charAt(100),-1); }
Text还有个find方法,类似String里indexOf方法
@Test public void testTextFind() { Text text = new Text("hadoop"); Assert.assertEquals("find a substring",text.find("do"),2); Assert.assertEquals("Find first 'o'",text.find("o"),3); Assert.assertEquals("Find 'o' from position 4 or later",text.find("o",4),4); Assert.assertEquals("No match",text.find("pig"),-1); }
Unicode的不同
当uft-8编码后的字节大于两个时,Text和String的区别就会更清晰,因为String是按照unicode的char计算,而Text是按照字节计算。
我们来看下1到4个字节的不同的unicode字符
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, text
, find
, 类型
, assert
, Assert,Java
序列化详解
hadoop 序列化、hadoop 序列化机制、hadoop pcap 序列化、hadoop数据序列化、hadoop序列化框架,以便于您获取更多的相关知识。