Java笔记:byte[]转String再转byte[]后数据变化问题

问题场景

数据的属性比如time原本是long类型,存入hbase表时将long转成byte[],个别场景下读取就遇到一些变化。
long转成byte[]入库,又被当作String读取(客观原因必须步骤),转回byte[],再转long类型,数据发生变化。
Java笔记:byte[]转String再转byte[]后数据变化问题图中可见,在转成String的前后byte[]已经不同了。

byte[]和String的转换问题

查资料得知,转换String类型有编码要求。
构造一个long转成的byte[]来进行String转换测试。Bytes.toString( byte[] )new String( bytes[] ) 可认为是相同的,且都是系统默认编码 UTF-8:
Java笔记:byte[]转String再转byte[]后数据变化问题
但该编码会改变原byte[]的值,长度和数值都会变。
Java笔记:byte[]转String再转byte[]后数据变化问题

解法一

CharEncoding.ISO_8859_1编码不会改变,可以得到原来的byte[],再转回long,就是原本的数了。但我的问题场景,作为String读取byte[]是客观需要,转成String的过程不能指定编码方式。
Java笔记:byte[]转String再转byte[]后数据变化问题

解法二

将原始long数据,先转成String,再转为byte[]存入表,中间的String转换过程就没有问题了。
Java笔记:byte[]转String再转byte[]后数据变化问题

补充测试

long和int等类型转成的byte[],都有String转换问题
Java笔记:byte[]转String再转byte[]后数据变化问题