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

本文探讨了在Java中将long类型的byte[]转换为String再转回byte[]时出现的数据变化问题。在转换过程中,由于编码的影响,原始byte[]的值和长度会发生变化。文中提出了两种解决方案:使用CharEncoding.ISO_8859_1编码避免变化,或者直接将long转为String再转为byte[]。通过测试,证实了解法二能有效解决此问题。
摘要由CSDN通过智能技术生成
问题场景

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

byte[]和String的转换问题

查资料得知,转换String类型有编码要求。
构造一个long转成的byte[]来进行String转换测试。Bytes.toString( byte[] )new String( bytes[] ) 可认为是相同的,且都是系统默认编码 UTF-8:
在这里插入图片描述
但该编码会改变原byte[]的值,长度和数值都会变。
在这里插入图片描述

解法一

CharEncoding.ISO_8859_1编码不会改变,可以得到原来的byte[],再转回long,就是原本的数了。但我的问题场景

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值