ObjectInputStream的readObject读一个HashMap怎么总出错

猿哥 2014-07-03 09:18:04
程序:HashMap<String, String> map=new HashMap<String,String>();
map.put("name", "kwj");
ByteArrayOutputStream baos=new ByteArrayOutputStream();
ObjectOutputStream oos=new ObjectOutputStream(baos);
oos.writeObject(map);
oos.flush();
String str=baos.toString("GBK");
byte[] byte_array=str.getBytes("GBK");
oos.close();
baos.close();
ByteArrayInputStream bais=new ByteArrayInputStream(byte_array);
ObjectInputStream ois=new ObjectInputStream(bais);
HashMap<String, String> m1=(HashMap<String, String>) ois.readObject();
出错:Exception in thread "main" java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2325)
at java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(ObjectInputStream.java:3063)
at java.io.ObjectInputStream$BlockDataInputStream.readUTF(ObjectInputStream.java:2864)
at java.io.ObjectInputStream.readUTF(ObjectInputStream.java:1072)
at java.io.ObjectStreamClass.readNonProxy(ObjectStreamClass.java:704)
...全文
319 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
guest6379 2014-07-04
  • 打赏
  • 举报
回复
// 也可以 // String str=baos.toString("GBK"); // byte[] byte_array=str.getBytes("GBK"); byte[] byte_array = baos.toByteArray();
guest6379 2014-07-04
  • 打赏
  • 举报
回复
        HashMap<String, String> map=new HashMap<String,String>();
        map.put("name", "kwj");
        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        ObjectOutputStream oout = new ObjectOutputStream(bout);
        oout.writeObject(map);
        oout.flush();
        
        ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
        System.out.println(bin.available());
        byte[] b = new byte[bin.available()];
        bin.read(b);
        HashMap<String, String> m1 = (HashMap<String, String>)(new ObjectInputStream(new ByteArrayInputStream(b)).readObject());
        System.out.println(m1.get("name"));
猿哥 2014-07-04
  • 打赏
  • 举报
回复
bout.toByteArray()这个得到的字节数组和 String str=baos.toString("GBK"); // byte[] byte_array=str.getBytes("GBK"); byte[] byte_array = baos.toByteArray(); 这个得到的不一样
猿哥 2014-07-04
  • 打赏
  • 举报
回复
1楼那个是对的,但是 // 也可以 // String str=baos.toString("GBK"); // byte[] byte_array=str.getBytes("GBK"); byte[] byte_array = baos.toByteArray(); 这个用这个运行的时候就会出错 Exception in thread "main" java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2325) at java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(ObjectInputStream.java:3063) at java.io.ObjectInputStream$BlockDataInputStream.readUTF(ObjectInputStream.java:2864) at java.io.ObjectInputStream.readUTF(ObjectInputStream.java:1072) at java.io.ObjectStreamClass.readNonProxy(ObjectStreamClass.java:704) at java.io.ObjectInputStream.readClassDescriptor(ObjectInputStream.java:830) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1601) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370) at udpchat.Test.main(Test.java:23)
小灰狼 2014-07-04
  • 打赏
  • 举报
回复
楼上正解,序列化之后得到的是二进制,不是字符串

62,620

社区成员

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

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