您的位置:首页 > 编程语言 > Java开发

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

2012-02-29 21:24 495 查看
在进行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);即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: