hadoop-common中WritableUtils的示例代码
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章将为大家详细讲解有关 hadoop-common中WritableUtils的示例代码,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。hadoop将java的
千家信息网最后更新 2025年02月03日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安全错误
数据库的锁怎样保障安全
网络安全行业绩效
东营网络机顶盒时间服务器
奇门之上为什么服务器连接失败
如何学软件开发工具
北京互动安全教育展馆软件开发
服务器网卡中关村
网络安全教育教学的课程总结
计算机网络技术17i
这种数据库
软件开发面试题一般问什么
美的软件开发待遇怎么样
浙江企业软件开发机构
飞腾腾锐d2000服务器
开个软件开发公司需要多少钱
电脑邮箱登录提示服务器验证失败
黄岛区ios软件开发公司
一分钟学会网络安全
天津网络安全竞赛报名
数据库安全的保障机制
大连新龙网络技术有限公司
死亡率数据库
网络安全有关警句
广州软件开发 极讯客
祁门县软件开发商是谁
云南新华互联网科技学校位置
上海佑畅网络技术有限公司
河南计算机网络技术专升本
服务器机柜管理软件
网络安全 个人简历
快速学计算机网络技术