BytesWritable使用

原创 2015年11月18日 17:30:44

BytesWritable不能作为mapreduce中的key或者value,与ByteWritable不同。

1,BytesWritable.tobyte(),将ByteWritable类型的数据转换为十六进制对,并以空格分开;

2,BytesWritable.set(byte[] newData,int offset,int length);//将值设置为给定的字节范围的副本

3,BytesWritable.copyBytes()//获得对象的byte[]类型全部数据

4,BytesWritable.getBytes()

main(){BytesWritable tt =new BytesWritable();
byte t[] = new byte[]{'t','a','g','u'};
tt.set(t, 0, t.length);
System.out.print(tt);}

main(){BytesWritable tt =new BytesWritable();
byte t[] = new byte[]{'t','a','g','u'};
tt.set(t, 0, t.length);
System.out.print(tt.toString());
}

两个输出的结果都为74 61 67 75,是十六进制的流字节,并且用空格隔开,即经过tostring()之后并没有将十进制的数据转换为BytesWritable所对应的字母。

main(){BytesWritable tt =new BytesWritable();
byte t[] = new byte[]{'t','a','g','u'};
tt.set(t,
n,t.length);//(n!=0)
System.out.print(tt);}

error:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at org.apache.hadoop.io.BytesWritable.set(BytesWritable.java:172)
at cug.TestOrdinary.main(TestOrdinary.java:13)

报错原因是byte[]数组越界,将其改为tt.set(t,n,t.length-n);即可以输出第t位的所有byte数。

相关文章推荐

Hadoop使用ByteWritable时的一个注意事项

今天使用ByteWritable时候遇到了问题,浪费了好多时间,最后通过查看ByteWritable的源代码才解决这个问题。分享一下,希望能帮助别人节约点时间。 自己写了一个类继承了RecordRea...

MapReduce中使用BytesWritable类型时要注意

转载地址:http://blog.csdn.net/xcytec/article/details/20909151 在MR程序中出现错误,数据读取的内容和原文件不一致,经过定位是因为使用By...
  • gyflyx
  • gyflyx
  • 2014年09月19日 13:54
  • 2653

BytesWritable 存储问题

BytesWritable 存储字节数组的下标问题

hadoop深入研究:(十一)——序列化与Writable实现

转载请写明来源地址:所有源码在github上,https://github.com/lastsweetop/styhadoop简介在hadoop中,Writable的实现类是个庞大的家族,我们在这里简...

Hadoop Serialization -- hadoop序列化详解 (2)【Text,BytesWritable,NullWritable】

回顾: 回顾序列化,其实原书的结构很清晰,我截图给出书中的章节结构: 序列化最主要的,最底层的是实现writable接口,wiritable规定读和写的游戏规则 (void write(DataOu...

Ajax的使用

  • 2017年11月16日 18:30
  • 75KB
  • 下载

ESAPI使用方法

  • 2017年11月16日 10:42
  • 423KB
  • 下载

Apache ab 测试使用指南

引言: ab测试是业界比较流行和简单易用的一种压力测试工具包,本文将简要介绍其核心使用的方法。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BytesWritable使用
举报原因:
原因补充:

(最多只允许输入30个字)