Hbase客户端信息采用byte[]与服务器进行通信,中文字符与byte[]的转换的转换有两种方式:
1.采用String类自带的函数
String s = "你好中国";
byte [] b = s.getBytes();
对应的byte[]转换为String为:
s = new String(s.getBytes());
2.采用org.apache.hadoop.hbase.util.Bytes类的函数
String s = "你好中国";
byte [] b = Bytes.toBytes(s);
对应的byte[]转换为String为:
s = Bytes.toString(Bytes.toBytes(s));
方法1 与方法2 都能完成自己的转换,输出也正常。
但是两种方法不能混合使用,因为两种方法中b值却一样,
方法1:b = [-60, -29, -70, -61, -42, -48, -71, -6]
方法2:b = [-28, -67, -96, -27, -91, -67, -28, -72, -83, -27, -101, -67]
原因在于换行的时候采用的Charset不一致
在方法2中 Bytes.toBytes(s); 最后调用的是String类中的s.getBytes("UTF-8");而不是s.getBytes()。
s.getBytes("UTF-8")与s.getBytes()最后都调用了的
static byte[] encode(String charsetName, char[] ca, int off, int len)
关键在于charsetName不同。
在看s.getBytes()最后的charsetName,
产生的函数为:
public static Charset defaultCharset() {
if (defaultCharset == null) {
synchronized (Charset.class) {
java.security.PrivilegedAction pa =
new GetPropertyAction("file.encoding");
String csn = (String)AccessController.doPrivileged(pa);
Charset cs = lookup(csn);
if (cs != null)
defaultCharset = cs;
else
defaultCharset = forName("UTF-8");
}
}
return defaultCharset;
}
跟系统参数file.encoding的值有关,查看下本机的file.encoding
System.out.println(System.getProperty("file.encoding"));
值为GB18030,因此以上两种方式产生的byte[]自然不同,
因此Hbase中文字符与byte[]的转换要统一编码格式,全部采用方法2最好,如果要使用String类的方法
使用方法如下:
String s = "你好中国";
byte [] b = s.getBytes("UTF-8");
对应的byte[]转换为String为:
s = new String(Bytes.toBytes(s),"UTF-8");
以上区别只针对与中文的转换,数字与英文以及"`~!@#$%^&*()_+=-|[]{}\\/.,<>?"没有区别!!
分享到:
相关推荐
这份“HBase官方文档中文版”提供了全面深入的HBase知识,帮助用户理解和掌握如何在大数据场景下有效地使用HBase。 一、HBase概述 HBase设计目标是提供大规模数据的实时读写能力,它运行在Hadoop之上,利用HDFS作为...
hbase权威指南是关于HBASE的基础读物,掌握HBASE的基石
《Learning HBase中文版》这本书是为那些希望深入了解HBase这一分布式列式数据库技术的读者而准备的。HBase作为Apache Hadoop生态系统的一部分,被广泛应用于大数据存储与处理场景,尤其在实时数据查询方面表现出色...
4. **配置Hadoop**:HBase需要与Hadoop协同工作,因此需要配置Hadoop的相关路径。在HBase的conf目录下,编辑`hbase-env.cmd`文件,设置`HADOOP_CONF_DIR`指向Hadoop的配置目录。 5. **修改配置文件**:编辑`hbase-...
而Spring Data Hadoop是Spring框架的一部分,它提供了与Hadoop生态系统集成的工具,包括对HBase的操作支持。本篇文章将详细讲解如何利用Spring Data Hadoop中的HbaseTemplate来操作HBase。 首先,我们需要理解...
HBase官方中文文档概述了Apache HBase TM的基本概念、配置方法、升级策略、shell使用、数据模型、架构设计、安全机制、API接口、性能调优以及故障排除等多方面的知识。HBase是一个开源的非关系型分布式数据库(NoSQL...
5. **zoo.cfg**:虽然HBase使用Zookeeper,但Zookeeper的配置通常是在Zookeeper自己的配置文件中完成的,不过这里也可能包含一些与HBase相关的Zookeeper设置。 ### HBase Doc文档 HBase的官方文档提供了详尽的指南...
要使用Java与Hbase交互,首先创建一个新的Java项目,并添加Hbase所需的JAR文件到项目的类路径。这些JAR文件位于`/usr/local/hbase/lib`目录下,包括Hbase客户端库和其他依赖库。 接下来,编写一个简单的Java程序...
### HBase 安装与使用知识点详解 #### 概述 HBase 是一款构建于 Hadoop 之上的分布式、可扩展的大规模数据存储系统。它提供了类似 Google BigTable 的功能特性,非常适合处理海量数据和高并发读写需求的应用场景。...
**Python-HBase中文参考指南** 在大数据处理领域,Apache HBase是一个重要的分布式列式数据库,它构建于Hadoop之上,提供了高并发、低延迟的数据存储服务。本指南针对HBase的中文用户,旨在帮助读者更好地理解和...
在HBase中,需要将字符串转换为字节数组。作者使用了getBytes()方法来将字符串转换为字节数组。 知识点5:分页查询的实现 作者使用了getDataMap()方法来实现分页查询。该方法传入了表名、开始行、结束行、当前页码...
HBase 0.97 中文文档 HBase 0.97 中文文档 HBase 0.97 中文文档
【分布式数据库HBase安装配置与实践】 HBase是一款基于Google Bigtable理念设计的开源NoSQL数据库,它构建在Hadoop之上,适用于处理大规模数据。在本文档中,我们将详细介绍如何在Linux环境中安装、配置和实践HBase...
3.1. 从HBase 0.20.x or 0.89.x 升级到 HBase 0.90.x 3.2. 从 0.90.x 到 0.92.x 4. The HBase Shell 4.1. 使用脚本 4.2. Shell 技巧 5. 数据模型 5.1. 概念视图 5.2. 物理视图 5.3. 表 5.4. 行 5.5. 列族 5.6. Cells...
这个过程通常涉及到多个步骤,包括HBase与Hive的交互,以及数据的迁移和转换。 描述中提到的方法是首先通过HBase的条件查询功能筛选出所需的数据,然后将这些数据导出到Hive中。Hive提供了更灵活的数据处理能力,...
HBase Shell是HBase提供的命令行界面,用户可以通过它来与HBase集群交互。在开始实验之前,确保已经正确安装并配置了Hadoop和HBase环境。 ### 2. 创建表 实验要求创建一个名为`student`的表,字段包括`Row Key`、`...
【HBase与Hadoop组件的关系】 1. **HDFS(Hadoop Distributed File System)**:HBase利用HDFS作为底层的文件存储系统,确保数据的分布式存储和容错性。 2. **MapReduce**:HBase使用Hadoop的MapReduce框架进行批量...
在深入了解HBase分布式事务与SQL实现前,我们首先需要明确几个核心概念和组件,这些包括HBase基础架构、Google Percolator模型、TiDB分布式数据库,以及它们之间的关系。 HBase是一款分布式的、开源的NoSQL数据库,...