当前位置:  开发笔记 > 编程语言 > 正文

java.io.StreamCorruptedException:无效的流标头:4920616D

如何解决《java.io.StreamCorruptedException:无效的流标头:4920616D》经验,为你挑选了1个好方法。

嗨,当我试图读取blob得到异常。正在发布如何写入DB并获得对DB的友好建议,这导致了太多问题。

ava.io.StreamCorruptedException: invalid stream header: 4920616D
                at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:782)
                at java.io.ObjectInputStream.(ObjectInputStream.java:279)
                at com.jiit.jfx.persistence.TypeHelper.readBlob(TypeHelper.java:137)
                at com.jiit.jfx.persistence.TypeHelper.get(TypeHelper.java:84)
                at com.jiit.jfx.persistence.dataaccess.OracleSQLQuery.get(OracleSQLQuery.java:116)
                at com.jiit.jfx.persistence.dataaccess.OracleSQLQuery.doOperation(OracleSQLQuery.java:65)
                at com.jiit.jfx.persistence.dataaccess.AbstractDAO.execute(AbstractDAO.java:181)
                at com.jiit.jfx.persistence.dataaccess.AbstractDAO.executeSQL(AbstractDAO.java:208)
                at 

com.jiit.ngcs.mx.server.model.rail.ASMMessageStore.getASMMessageStore(ASMMessageStore.java:196)




    enter code here

    Reading BOLB :

        public static Blob createBlob(Object serializable) throws PersistenceException{
            try {
                ByteArrayOutputStream bStream = new ByteArrayOutputStream();
                ObjectOutputStream oStream = new ObjectOutputStream(bStream);
                oStream.writeObject(serializable);
                oStream.flush();
                oStream.close();
                return createBlob(bStream.toByteArray());
            } catch (Exception e) {
                throw new PersistenceException(e.getMessage());
            }
        }
        in TypeHelper.java -- > createBlob


        private static Object readBlob(int index, ResultSet rs) throws SQLException {
            try {
                InputStream is = rs.getBinaryStream(index);
                if(is != null) {
                    ObjectInputStream os = new ObjectInputStream(is);
                    return os.readObject();
                }
                return null;
            } catch (IOException e) {
                e.printStackTrace();
                throw new SQLException(e.getMessage());
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
                throw new SQLException(e.getMessage());
            }

尝试了stackoverflow和其他博客中给出的所有案例。仍然不了解确切的问题。



1> Stephen C..:

让我们开始 4920616D。如果将其解码为ASCII字符,则会得到“我是” ...英文文本。现在这可能是一个巧合,但请假设并非如此。

是什么导致文本出现在您期望序列化对象的地方?

好吧,一种可能是您弄错了结果集索引值。如果结果集中的索引1对应于CHAR或VARCHAR或类似字段中的值,则您的JDBC驱动程序可以返回由一堆编码文本组成的“二进制流”。您可能会看到数据库中可能用于存储文本的多种字符编码方案的那些字符,包括ASCII,LATIN-1和UTF-8。

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有