HBase之Bytes

点击蓝字关注我吧

【本文详细介绍了HBase中Bytes相关的基本概念,欢迎读者朋友们阅读、转发和收藏!】

1 基本概念

字节 是一个数字信息单位在 计算 和 通信 的最常用的八个组成 位 。它通常用作计算机信息计量单位,不分数据类型。

Hbase 中的 Bytes 类,用来将 Java 类型,比如 String 或者 long 转化为 raw 、 byte 数组等 HBase 支持的类型,如下:

String s = "欢迎关注 数据仓库 ";

byte [] b = Bytes.toBytes(s);

中文字符与 byte[] 的转换的转换有两种方式:

1. 采用 String 类自带的函数

String s = " 欢迎关注 数据仓库  ";

byte [] b = s.getBytes();

2. 采用

org.apache.hadoop.hbase.util.Bytes 类的函数

String s = " 欢迎关注 数据仓库  ";

byte [] b = Bytes.toBytes(s);

方法 1 与方法 2 都能完成转换,但是两种方法不能混合使用,因为两种方法转换时采用的 Charset 不一致。方法 2 中 Bytes.toBytes(s) 所用 Charset 为 UTF-8 ,方法 1 所用 Charset 与系统参数 file.encoding 的值有关,因此 Hbase 中文字符与 byte[] 的转换要统一编码格式,全部采用方法 2 最好,如果要使用 String 类的方法,使用方法如下:

String s = " 欢迎关注 数据仓库  ";

byte [] b = s.getBytes("UTF-8");

对应的 byte[] 转换为 String 为 :

s = new String(Bytes.toBytes(s),"UTF-8");

以上区别只针对与中文的转换 , 数字与英文以及 "`~!@#$%^&*()_+=-|[]{}\\/.,?" 两种没有区别。

此外, 关于这个类和它的功能还有一些值得一提。大部分方法都有 3 种形式,例如:

static long toLong( byte [] bytes)

static long toLong( byte [] bytes, int offset)

static long toLong( byte [] bytes, int offset, int length)

用户可以输入一个字节数组,或者一个字节数组在加一个偏移值,或者一个字节数组、一个偏移值和一个长度值。具体使用哪种方法取决于最初这个字节数组是怎么生成的。如果这个字节数组之前是由 toBytes() 方法生成的,用户就可以安全地使用第一种形式的方法将其转化回来,只需送入这个字节数组而不需要其他额外信息整个数组都是转换过来的值。

然而,API和HBase内部把数据存储为一个较大的数组,例如使用下面的方法:

static int putLong( byte [] bytes, int offset, long val)

这个方法允许用户把一个long值写入一个字节数组的特定偏移位置。用户可以使用后面的两种toLong()方法存取这种较大的字节数组的数据。

Byte 类支持以下原生 Java 类型到字节数组的互转 :String 、 boolean 、 short 、 int 、 long 、 double 和 float 。如下表

Bytes 类与 Java 提供的 ByteBuffer 类的功能有所重叠。不同的是,前者所有的操作都不需要创建一个新的实例。这是考虑到某些情况下的性能优化,因为 HBase 内部使用了其中许多方法并多次调用,不创建实例也就避免了许多不必要的垃圾回收。

我知道你在看

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200531A0AIBO00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券