有关一个String 转换成 ByteArrayInputStream 和FileInputStream 里面而且数据不会变化的问题 有一字符串:String a=“[B@1bc887b”;如何把 a 写入到ByteArrayInputStream 和FileInputStream 里面,并且数据内容不会改变? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 String a=“[B@1bc887b”;这个怎么看都是你将一个byte[]直接toString了如果你确信这个是正确的,new ByteArrayInputStream(a.getBytes()); to:ChDw(米) ( ) String a=“[B@1bc887b”;这是将一个byte[]直接toString了但是a.getBytes(); 执行后数据内容就变了! byte 和 String 的转化肯定是存在问题的,不可能在不丢失精度的情况下互转的。先MART&UP。 那是因为你根本写错方法了,如果你的byte数组保存的是可见字符,可以:String a = new String(byteArray);a.getBytes();这样就与byteArray相同实在不明白你既然有这样的应用,变成String有什么意义 我的代码是这样子的:byte[] abc=BAOS.toByteArray();System.out.println(abc);String StrMySerializer=new String(abc);System.out.println("序列化: "+StrMySerializer);OOS.close();System.out.println(StrMySerializer.getBytes());打印结果:[B@1bc887b序列化: [B@a46701两个不一样啊 靠,你应该调用java.util.Arrays.equals(abc, StrMySerializer.getBytes());这个应该是返回true(前提是你的数组内容是可见字符) 晕byte[] abc=BAOS.toByteArray();System.out.println(abc);你这里打印出来的是什么?是abc.toString()的内容,这个数据和abc里面的东西没关系,相当于一个Object.toString(),和new String(abc)完全是两回事所以你看到的完全是两个东西,第一个是byte[]这个Object的toString()的值,第二个是把byte[]转换为String的值 to:ChDw(米) java.util.Arrays.equals(abc, StrMySerializer.getBytes());这句话起什么作用啊!不太明白,能说明一下吗?to:fool_leave(请及时结贴) 你的意思是说把一个byte[] abc转换成一个String 时不丢失数据方法用:String StrMySerializer=new String(abc);那么把这个StrMySerializer再转成一个byte[] 用什么方法呢? 不明白就看文档!而且这个方法从名字就非常明确表示了:如果abc中的内容等于StrMySerializer.getBytes()就返回true to:ChDw(米) 运行的结果如下:abc=byte[68]StrMySerializer.getBytes()=byte[68]可是java.util.Arrays.equals(abc, StrMySerializer.getBytes());=false 这是为什么啊! 如果你的byte[]数组是从ObjectOutputStream之后得来的,那么是不可以new String(buff)的,因为其中包含了不可见字符,根本不是一个字符串你可以Integer.toHexString()这样转换每个字节,也可以使用BASE64编码后得到可见字符ByteArrayOutputStream baos = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(baos);List list = new ArrayList();list.add("112");oos.writeObject(list);oos.close();byte[] buff = baos.toByteArray();sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();String str = encoder.encode(buff);System.out.println(str);System.out.println(Arrays.equals(buff, new sun.misc.BASE64Decoder().decodeBuffer(str))); mock 中如何模拟任意的数组 麻烦帮忙看一个简单的程序!!!!!! 寻求正确的JAVA学习方法! 如此简单的问题,马上给分 菜鸟急求!给分100 各位大仙初学JAVA的第一本书是什麽? 用Class.newInstance()创建实例快,还是用new创建实例快? equalsIgnoreCase() 这个方法是什么意思? 新手,请多指教!在线等待.......... 四则运算求助 java是如何控制打印的??? VE插件开放的工程的打包问题 小弟初学跪求解答
如果你确信这个是正确的,new ByteArrayInputStream(a.getBytes());
String a=“[B@1bc887b”;这是将一个byte[]直接toString了
但是a.getBytes(); 执行后数据内容就变了!
先MART&UP。
String a = new String(byteArray);
a.getBytes();这样就与byteArray相同
实在不明白你既然有这样的应用,变成String有什么意义
byte[] abc=BAOS.toByteArray();
System.out.println(abc);
String StrMySerializer=new String(abc);
System.out.println("序列化: "+StrMySerializer);
OOS.close();
System.out.println(StrMySerializer.getBytes());打印结果:
[B@1bc887b
序列化:
[B@a46701
两个不一样啊
你应该调用java.util.Arrays.equals(abc, StrMySerializer.getBytes());
这个应该是返回true(前提是你的数组内容是可见字符)
System.out.println(abc);
你这里打印出来的是什么?是abc.toString()的内容,这个数据和abc里面的东西没关系,相当于一个Object.toString(),和new String(abc)完全是两回事
所以你看到的完全是两个东西,第一个是byte[]这个Object的toString()的值,第二个是把byte[]转换为String的值
java.util.Arrays.equals(abc, StrMySerializer.getBytes());这句话起什么作用啊!不太明白,能说明一下吗?to:fool_leave(请及时结贴)
你的意思是说把一个byte[] abc转换成一个String 时不丢失数据方法用:
String StrMySerializer=new String(abc);
那么把这个StrMySerializer再转成一个byte[] 用什么方法呢?
运行的结果如下:
abc=byte[68]
StrMySerializer.getBytes()=byte[68]
可是
java.util.Arrays.equals(abc, StrMySerializer.getBytes());=false 这是为什么啊!
你可以Integer.toHexString()这样转换每个字节,也可以使用BASE64编码后得到可见字符
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
List list = new ArrayList();
list.add("112");
oos.writeObject(list);
oos.close();
byte[] buff = baos.toByteArray();
sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
String str = encoder.encode(buff);
System.out.println(str);
System.out.println(Arrays.equals(buff, new sun.misc.BASE64Decoder().decodeBuffer(str)));