hadoop-common中WritableUtils的示例代码
发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,这篇文章将为大家详细讲解有关 hadoop-common中WritableUtils的示例代码,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。hadoop将java的
千家信息网最后更新 2025年12月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安全错误
数据库的锁怎样保障安全
用友数据库向后兼容补丁在哪
用移动网络安全可以吗
数据库的mdf文件
京东 云数据库
公安服务器管理规定
温州区九天软件开发工作室
同城配送系统数据库
中国红客联盟重组网络安全
计算机操作试题视频数据库应用
和网络安全相关的图片
网维大师服务器主板
网络安全调查报告及扇形统计图
缓存的数据库同步
网络安全获奖作品视频展播
网络安全攻防赛用到的软件
互联网科技小品
华为打开g卡数据库
csgo不在安全服务器上玩游戏
网络安全和信息化推进会
历史数据库 sqlite
万得非公开数据库
湖南放心软件开发服务价钱
征途如何在云服务器中运行
学数学软件开发
浙江正规软件开发推荐货源
数据库的全称怎么读
文件存储服务器搭建
win7备用dns服务器怎么填
宜兴电子软件开发活动简介
软件开发学费多少钱