java 里面的string 和byte[] 怎么互转?

 我来答
百度网友d8a1812
推荐于2018-03-30 · TA获得超过673个赞
知道小有建树答主
回答量:694
采纳率:71%
帮助的人:547万
展开全部
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" );
这样所需要的字节就有恢复了。
匿名用户
2013-08-18
展开全部
你可以看API 文档吗? string 有个构造函数 参数就是byte[] String有个成员函数是 getBytes(**)好像是
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-08-18
展开全部
Note1: String 可转为 byte[] --
String str="abc";
byte[] data=str.getBytes();
Note2: byte[] 可转为 String --
byte[] data=.....
String s=new String(data);
Note3:
为避免发生编码的困扰, 建议不要转成 byte[].
与char[] 互转比较好.
Note4: String 可转为 char[] --
String str = "abc"; 相当於是
char data[] = {'a', 'b', 'c'};
String str = new String(data);
Note5: char[] 可转为 String --
String str="abc";
char[] data=str.toCharArray();
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
LazzzyMiao
2018-04-18 · 超过10用户采纳过TA的回答
知道答主
回答量:42
采纳率:100%
帮助的人:11.8万
展开全部

看了看答案。。有这么麻烦吗,初学者很容易看晕啊。

直接说怎么转就好啊

//byte[]转String
byte[] bytes = new byte[] {'A','B','C','D'};//new一个新的 byte[]
String str = new String(bytes); //将bytes转成String
System.out.println( str);//输出:ABCD

//底下是String 转 byte[]
String str1 = "ABCD"; //你这个看不懂就去面壁
System.out.println( str1.getBytes() ); //转成字节数,输出:B@161cd475(不用在意这些玩意)
System.out.println( Arrays.toString(str1.getBytes()) );//输出:[65, 66, 67, 68],这是每个字母对应的ASCII码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式