hadoop-common中WritableUtils的示例代码
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章将为大家详细讲解有关 hadoop-common中WritableUtils的示例代码,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。hadoop将java的
千家信息网最后更新 2026年11月04日hadoop-common中WritableUtils的示例代码
这篇文章将为大家详细讲解有关 hadoop-common中WritableUtils的示例代码,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
hadoop将java的基本类型进行封装,对整型进行编码时,分为固定长度格式、可变长度格式。可变长度格式使用一种比较灵活的编码方式,对与较小的数(尤其是负数)可以节省空间存储。
VIntWritable
public class VIntWritable implements WritableComparable{ private int value;//getter //setter @Override public void readFields(DataInput in) throws IOException { value = WritableUtils.readVInt(in); } @Override public void write(DataOutput out) throws IOException { WritableUtils.writeVInt(out, value); }}
WritableUtils.writeVLong
public static void writeVInt(DataOutput stream, int i) throws IOException { writeVLong(stream, i); } public static void writeVLong(DataOutput stream, long i) throws IOException {if (i >= -112 && i <= 127) { stream.writeByte((byte)i); return; }int len = -112;if (i < 0) { i ^= -1L; // take one's complement' len = -120; }long tmp = i;while (tmp != 0) { tmp = tmp >> 8; len--; } stream.writeByte((byte)len); len = (len < -120) ? -(len + 120) : -(len + 112);for (int idx = len; idx != 0; idx--) { int shiftbits = (idx - 1) * 8; long mask = 0xFFL << shiftbits; System.out.println(((i & mask) >> shiftbits)); stream.writeByte((byte)((i & mask) >> shiftbits)); } }
如果i在 [-112 ~ 127] 之间,直接转换为byte类型存储。
如果i小于-112时,将其转换成正数(异或-1L),将标识量len 设置-120;否则len为-112
移位要存储的数据,同时len进行自减(len即做了标示量,又统计了移位次数)。
将标识量写到输出流。
重置len,将len设置为移位个数。
进行循环,将数据每8位写到输出流(大端模式),具体分析for循环。
WritableUtils.readVLong
public static long readVLong(DataInput stream) throws IOException {byte firstByte = stream.readByte();int len = decodeVIntSize(firstByte);if (len == 1) { return firstByte; }long i = 0;for (int idx = 0; idx < len-1; idx++) { byte b = stream.readByte(); i = i << 8; i = i | (b & 0xFF); }return (isNegativeVInt(firstByte) ? (i ^ -1L) : i); } public static int decodeVIntSize(byte value) {if (value >= -112) { return 1; } else if (value < -120) { return -119 - value; }return -111 - value; } public static boolean isNegativeVInt(byte value) {return value < -120 || (value >= -112 && value < 0); }
读取一个byte类型
判断读出数据如果大于-112,说明不是标志量,可以直接返回原始数据,如果小于-120或者在[-112 ~ -120]之间,说明为标识量,需要判断返回移动位数。
通过得到移动的位数,每次移动8位,异或移位。还原数据。
判断表示量,如果在小于-120 或者在[0 ~ -112]之间,证明是负数,将得到的数据进行异或-1L得到最终值。
关于" hadoop-common中WritableUtils的示例代码"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
数据
之间
标识
格式
篇文章
类型
长度
存储
移动
代码
示例
位数
更多
编码
负数
可变
循环
输出
不错
原始
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
百单网互联网科技有限公司
互联网金融监管科技数据
新华互联网科技学院
高科技与互联网
互联网 的科技创新
亿策互联网科技
滨湖区互联网智能科技产品供应
中国的互联网科技企业的崛起
重庆威客帮互联网科技
互联网企业和科技型企业
和信科技工业互联网
晓花互联网科技有限公司网址
互联网科技公司有风险吗
内蒙古九一互联网科技
长沙互联网科技
保山互联网科技靠谱吗
三亚科技创新互联网基地
平安好医生打造互联网科技医疗
互联网科技创新方面的资料
科技美学互联网 艺术
美国互联网保险保险科技
科技平台互联网
互联网科技与金融科技
西安互联网科技
互联网科技大会
武汉健翔互联网络科技有限公司
速维有品互联网信息科技(苏州)有限公司
黑云互联网科技有限公司
广州互联网高科技取餐柜
长沙易易互联网科技有限公司