深入 JAVA里面关于byte数组和String之间的转换问题

把byte转化成string,必须经过编码。 
  例如下面一个例子: 
  

importjava.io.UnsupportedEncodingException;
  publicclass test{
  publicstatic void main(String g[]) {
  Strings = "12345abcd";
  byteb[] = s.getBytes();
  Stringt = b.toString();
  System.out.println(t);
  }
  } 

  输出字符串的结果和字符串s不一样了. 
  经过以下方式转码就可以正确转换了: 
  

publicclass test{
  publicstatic void main(String g[]) {
  Strings = "12345abcd";
  byteb[] = s.getBytes();
  try{
  Stringt = new String(b);
  System.out.print(t);
  }catch (Exception e) {
  e.printStackTrace();
  }
  }
  } 

 Stringstr = "String";
  byte[]byte1 = str.getBytes();
  Stringstr1 = new String(byte1);
  byte[]byte2 = str1.getBytes();
  Stringstr2 = new String(byte2);
  System.out.println("str<<<"+ str);
  System.out.println("byte1<<<"+ byte1);
  System.out.println("str1<<<"+ str1);
  System.out.println("byte2<<<"+ byte2);
  System.out.println("str2<<<"+ str2); 

 
  ------------------------------------- 
  输出结果 
  str<<<String 
  byte1<<<[B@192d342 
  str1<<<String 
  byte2<<<[B@6b97fd 
  str2<<<String 
  想请教为什么两个byte输出的不一样呢? 
  Stringstr = "String"; 
  byte[]byte1 = str.getBytes(); 
  Stringstr1 = new String(byte1); 
  byte[]byte2 = str1.getBytes(); 
  ---------- 
  注意byte1是str得到的byte数组,而byte2是另一个字符串str1得到的数组 
  他们本身也是两个对象 
  直接打印实际上调用的是toString()方法,而toString()的默认实现是打印对象类型+hashCode() 
  [B表示byte数组 
  @表示之后的是地址 
  后面跟着的是hashCode,其实就是其虚拟机地址 
  所以这个结果也就是顺理成章了.

时间: 2024-10-10 02:09:02

深入 JAVA里面关于byte数组和String之间的转换问题的相关文章

java代码将一个byte数组封装成url,可以直接访问网络下载

问题描述 java代码将一个byte数组封装成url,可以直接访问网络下载 1.我从别的地方能且只能得到一个byte数组和一个文件名,此数组原本是一个doc文件, 2.我现在要将这个数组封装成url下载地址,就是直接在浏览器中输入地址就能直接下载的那种 3.我用的语言是java,服务器是tomcat 各位大神,救命! 解决方案 换个思路,不是组装成url,而是在给定一个selevet,然后在相应的response写回数据.还有要在response返回时设置相应的header参数. Content

string-c++中怎么将本地图片转化成java需要的byte数组

问题描述 c++中怎么将本地图片转化成java需要的byte数组 c++调用java写的webservice时,需要传入一个本地图片转化为byte数组的数据,求大神给讲一下. 这是java写的webservice接口方法. public String verifyFaceSingle(String deviceId,byte[] leftImage,byte[] rightImage); 现在需要在vs2010里面获取byte[] leftImage. Serializer->StartElem

基于java中byte数组与int类型的转换(两种方法)_java

java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形int转换成byte数组,同时如何把一个长度为4的byte数组转换为int类型.下面有两种方式. public static byte[] int2byte(int res) { byte[] targets = new byte[4]; targets[0] = (byte) (res & 0xf

读取Java文件到byte数组的三种方法(总结)_java

读取Java文件到byte数组的三种方法(总结) package zs; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.Rando

java 如何将一个byte[]数组分成多个部分发送?

问题描述 java 如何将一个byte[]数组分成多个部分发送? 现在一个项目,是要求手机端向智能手表发送byte[]数组,一个很大的byte数组,比如16*1024个字节,如何分成多个部分,比如每个部分都是200字节,然后把这几个部分一部分部分的发到手表端,就是byte[]数组分块,发送的函数怎么来写呀!?谢谢各位大神了! 解决方案 Arrays.copyOfRange可以复制你的数组的一块构成新的数组 你循环调用就可以了 解决方案二: 参考http://www.yiibai.com/java

C#中char[]与string之间的转换

  string 转换成 Char[] string ss = "abcdefg"; char[] cc = ss.ToCharArray(); Char[] 转换成string string s = new string(cc); 此外,byte[] 与 string 之间的装换 byte[] bb = Encoding.UTF8.GetBytes(ss); string s = Encoding.UTF8.GetString(bb); 下面我们利用 StringBuilder 来进

『0015』 - Solidity Types - 动态字节数组(Dynamically-sized byte array)、固定大小字节数组(Fixed-size byte arrays)、string之间的转换关系

孔壹学院:国内区块链职业教育领先品牌 作者:黎跃春,区块链.高可用架构工程师 微信:liyc1215 QQ群:348924182 博客:http://liyuechun.org 固定大小字节数组(Fixed-size byte arrays)之间的转换 固定大小字节我们可以通过bytes0 ~ bytes32来进行声明,固定大小字节数组的长度不可变,内容不可修改.接下来我们通过下面的代码看看固定大小字节之间的转换关系. pragma solidity ^0.4.4; contract C { b

Java 文件和byte数组转换

/** * 获得指定文件的byte数组 */ private byte[] getBytes(String filePath){ byte[] buffer = null; try { File file = new File(filePath); FileInputStream fis = new FileInputStream(file); ByteArrayOutputStream bos = new ByteArrayOutputStream(1000); byte[] b = new

Javabyte[]数组和十六进制String之间的转换

Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果new String(H) + new String(L).即byte用十六进制表示只占2位. 同理,相反的转换也是将两个16进制字符转换成一个byte,原理同上. 根据以上原理,我们就可