java里面byte数组和String字符串转换有两种方法:
1、不设定编码方式
<pre name="code" class="java">String str = "Hello"
byte[] srtbyte = str.getBytes()//string 转 byte[]
//s
String res = new String(srtbyte)//byte[] 转 string
2、设定编码方式
String str = "hello"
byte[] srtbyte = null
try {
srtbyte = str.getBytes("UTF-8")//string 转 byte[]
String res = new String(srtbyte,"UTF-8")//byte[] 转 string
} catch (UnsupportedEncodingException e) {
e.printStackTrace()
}
Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
Java 编程语言的风格十分接近C、C++语言。Java是一个纯的面向对象的程序设计语言,它继承了 C++ 语言面向对象技术的核心,Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java SE 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
1.string 转 byte[]byte[] midbytes=isoString.getBytes("UTF8")
//为UTF8编码
byte[] isoret = srt2.getBytes("ISO-8859-1")
//为ISO-8859-1编码
其中ISO-8859-1为单字节的编码
2.byte[]转string
String isoString = new String(bytes,"ISO-8859-1")
String srt2=new String(midbytes,"UTF-8")
说明:
在网络传输或其它应用中常常有同一的中间件,假设为String类型。因此需要把其它类型的数据转换为中间件的类型。
将字符串进行网络传输时,如socket,需要将其在转换为byte[]类型。这中间如果采用用不同的编码可能会出现未成预料的问题,如乱码。
下面举个例子:
我们用socket传输String类型的数据时,常常用UTF-8进行编码,这样比较可以避免一个“中文乱码”的问题。
发送端:
String sendString="发送数据"
byte[] sendBytes= sendString .getBytes("UTF8")
.......socket发送
接受端:
String recString=new String( sendBytes ,"UTF-8")
但是,这里往往又会出现这样一个问题。就是想要发送的数据本身就是byte[]类型的。
如果将其通过UTF-8编码转换为中间件String类型就会出现问题
如:
byte[] bytes = new byte[] { 50, 0, -1, 28, -24 }
String sendString=new String( bytes ,"UTF-8")
byte[] sendBytes= sendString .getBytes("UTF8")
然后再发送
接受时进行逆向转换
String recString=new String( sendBytes ,"UTF-8")
byte[] Mybytes=isoString.getBytes("UTF8")
这时Mybytes中的数据将是[50, 0, -17, -65, -67, 28, -17, -65, -67]
因此,需要采用单字节的编码方式进行转换
String sendString=new String( bytes ,"UTF-8") 改为 String sendString=new String( bytes , "ISO-8859-1" )
byte[] Mybytes=isoString.getBytes("UTF8") 改为 byte[] Mybytes=isoString.getBytes( "ISO-8859-1" )
这样所需要的字节就有恢复了。