首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

【请问】使用ObjectInputStream的readObject无法读出带有中文的对象

2012-03-13 
【请教】使用ObjectInputStream的readObject无法读出带有中文的对象我使用ObjectOutputStream(new ByteArray

【请教】使用ObjectInputStream的readObject无法读出带有中文的对象
我使用ObjectOutputStream(new ByteArrayOutputStream()).writeObject将一个JavaBean对象写入一个字符串content,
然后使用ObjectInputStream(new ByteArrayInputStream(content.getBytes())).readObject()却读不出来。
并且跑出异常:
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2279)

最后发现必须指定编码格式为ISO-8859-1才行(其他编码不行,比如GBK、UTF-8)。但是不知道什么原因。
难道writeObject是按照ISO-8859-1编码写入字节流的吗?是否可以指定编码格式呢?


问题代码:

Java code
//将对象写入字符串public static String serialzeToString(Object o){        ObjectOutputStream os = null;        try{            ByteArrayOutputStream bs = new ByteArrayOutputStream();            os = new ObjectOutputStream(bs);            os.writeObject(o);            byte[] bytes = bs.toByteArray();            String retStr = new String(bytes);            return retStr;        }catch(Exception e){            e.printStackTrace();            return null;        }    }


Java code
//从字符串中读取出对象public static Object derialzeFromString(String content){        ObjectInputStream ois = null;        try{            byte[] bytes = content.getBytes();            ByteArrayInputStream bs = new ByteArrayInputStream(bytes);            ois = new ObjectInputStream(bs);            Object o =  ois.readObject();            return o;        }catch(Exception e){            e.printStackTrace();            return null;        }    }


按照ISO-8850-1编解码就可以了
修改后的代码:
Java code
//将对象写入字符串public static String serialzeToString(Object o){        ObjectOutputStream os = null;        try{            ByteArrayOutputStream bs = new ByteArrayOutputStream();            os = new ObjectOutputStream(bs);            os.writeObject(o);            byte[] bytes = bs.toByteArray();            String retStr = new String(bytes,"ISO-8859-1");   //按照ISO-8859-1解码            return retStr;        }catch(Exception e){            e.printStackTrace();            return null;        }    }


Java code
//从字符串中读取出对象public static Object derialzeFromString(String content){        ObjectInputStream ois = null;        try{            byte[] bytes = content.getBytes("ISO-8859-1");//按照ISO-8859-1编码            ByteArrayInputStream bs = new ByteArrayInputStream(bytes);            ois = new ObjectInputStream(bs);            Object o =  ois.readObject();            return o;        }catch(Exception e){            e.printStackTrace();            return null;        }    }


[解决办法]
探讨
为什么其他编码不合适呢?比如GBK、UTF-8.所以我觉得是不是ObjectOutputStream在写入时将对象中的中文以ISO-8859-1编码成了字节流呢?

热点排行