Java中String类型和Byte类型的互换问题

     在进行Android的客户端和服务端的接口开发的过程中,笔者遇到这样的问题,因为采用的是流InputStream和OutputStream的操作,其中的参数都为byte型,在进行协议设计的时候,不可避免的需要将其转换为String类型,然后再在服务端进行识别并进行下一步的操作,但是在byte型转换为String类型的过程中,尝尝会出现乱码,开始笔者百思不得其解,后来根据Java Doc中关于String类型中toString()方法的说明,找到了相关的解决办法-使用String的构造函数,将byte类型的数组作为参数传入即可。
     详细的情况如下:
     String类型的字符/字符串转换为byte型:
     String s = "Hello,world";//定义字符串变量
     byte [] b = new byte[1024];//初始化byte对象b
     b = s.getBytes();//将字符串变量byte化,结果存在b中
     b = s.getBytes(Charset charset);//charset的取值可以为

  Charset

Description

  US-ASCIISeven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the Unicode character set
  ISO-8859-1  ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1
  UTF-8Eight-bit UCS Transformation Format
  UTF-16BESixteen-bit UCS Transformation Format, big-endian byte order
  UTF-16LESixteen-bit UCS Transformation Format, little-endian byte order
  UTF-16Sixteen-bit UCS Transformation Format, byte order identified by an optional byte-order mark
     b = s.getBytes(String charsetName);
     b = getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin);
     通过以上方法均可将一个String类型的字符串转变为byte类型,那么如何将byte类型的数组转化为String类型呢?
     若使用:
     String s1 = b.toString();则根据控制台打印的结果为:[B@de6ced,显然并不是我们需要得到的结果,那么这种情况下该如何做呢?
  看看Java Doc中关于toString()函数的定义:
  toString
     public String toString()
     返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂。
建议所有子类都重写此方法。
     Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
     返回:
该对象的字符串表示形式。
     由上面的含义可知,使用b.toString()返回的是一个十六进制的无符号数,是一个哈希码,与我们需要得到的数据不同,故使用toString()方法是行不通的。
     正确的方法是使用byte型数组作为一个参数,使用String构造一个字符串,即为String s1 = new String(b);即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值