Java Object 和byte数组的转换问题,求指导

zjjyyang 2019-03-24 08:45:55
根据网上代码,编写了一个简单的程序,总是出现下面的问题:
java.io.StreamCorruptedException: invalid stream header: 68656C6C
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at TestObj.toObject(TestObj.java:28)
at TestObj.main(TestObj.java:14)
[B@6d311334

开发环境使用的是Eclipse for Java:
Version: 2018-12 (4.10.0)
Build id: 20181214-0600
安装了Java SE-1.8

程序代码为:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
//import org.apache.commons.lang.SerializationUtils;

public class TestObj
{
public static void main(String[] args) throws ClassNotFoundException, IOException
{
String str="hello world";
byte[] bytestmp=str.getBytes("iso-8859-1");
Object sObj=toObject(bytestmp);
// Object sObj=SerializationUtils.deserialize(bytestmp);
byte[] tmparr=toByteArray(sObj);
String tmpOut=tmparr.toString();
System.out.println(tmpOut);
}

public static Object toObject (byte[] bytes)
{
Object obj = null;

try {
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);

ObjectInputStream ois = new ObjectInputStream(bis);
obj = ois.readObject();
ois.close();
bis.close();
} catch (IOException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
//obj=SerializationUtils.deserialize(bytes);
return obj;
}

public static byte[] toByteArray (Object obj)
{
byte[] bytes = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
oos.flush();
bytes = bos.toByteArray ();
oos.close();
bos.close();
} catch (IOException ex) {
ex.printStackTrace();
}
return bytes;
}

}
...全文
813 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjjyyang 2019-04-14
  • 打赏
  • 举报
回复
感谢各位指导,已经解决,不需要进行序列化的转换,直接使用类型的强制转换就可以在MPI函数中使用了,经过测试,数据也是正确的。
独眼的小熊 2019-03-27
  • 打赏
  • 举报
回复
资源关闭最好写在finally里面
qq_39936465 2019-03-27
  • 打赏
  • 举报
回复
简单来说写入文件是什么类型读出的时候也要用该类型来读,程序无法自己识别文件中数据的类型。只有告诉程序是什么类型的数据正常读出后,才能进行转换。
qybao 2019-03-24
  • 打赏
  • 举报
回复
简单来说,不是任何一个byte数组都能转为object,这个byte数组是object经过某种算法转成的byte数组才行
qybao 2019-03-24
  • 打赏
  • 举报
回复
你用readobject反序列化,就应该用writeobject序列化。用gatbytes来序列化,就应该用new string([]byte)来反序列化(只适用string)。

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧