java.io.StreamCorruptedException:无效的流头:4920616D [英] java.io.StreamCorruptedException: invalid stream header: 4920616D

查看:1135
本文介绍了java.io.StreamCorruptedException:无效的流头:4920616D的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨当我试图读blob获取异常。我发布如何写入数据库和创建数据库恳请建议,其造成太多的问题..

  ava.io.StreamCorruptedException :无效的流头:4920616D 
在java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:782)
在java.io.ObjectInputStream。< init>(ObjectInputStream.java:279)
在com.jiit.jfx.persistence.TypeHelper.readBlob(TypeHelper.java:137)
在com.jiit.jfx.persistence.TypeHelper.get(TypeHelper.java:84)
在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)




在这里输入代码

读取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();
}
返回null;
} catch(IOException e){
e.printStackTrace();
抛出新的SQLException(e.getMessage());
} catch(ClassNotFoundException e){
e.printStackTrace();
抛出新的SQLException(e.getMessage());
}

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

解决方案

让我们从开始4920616D 。如果你解码为ASCII字符,你会得到我是...英文文本。现在,这可能是一个巧合,但让我们假设它不是。

什么可能导致文本出现在您期待序列化对象?

好吧,有一种可能性是您得到的结果集索引值错误。如果结果集中的索引1对应于来自CHAR或VARCHAR或类似字段的值,则JDBC驱动程序可以返回由一串编码文本组成的二进制流。你可以看到这些字符的数字可以用来存储文本,包括ASCII,LATIN-1和UTF-8字符编码方案。


hi When am trying to read blob getting the exception . am posting how am writing into DB and geting to db kindly suggest , its causing too much problem..

ava.io.StreamCorruptedException: invalid stream header: 4920616D
                at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:782)
                at java.io.ObjectInputStream.<init>(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());
            }

Tried all cases given in stackoverflow and other blogs . still not understand exact issues.

解决方案

Lets start with 4920616D. If you decode that as ASCII characters, you get "I am" ... English text. Now that could be a coincidence, but lets assume that it isn't.

What could cause text to appear where you were expecting a serialized object?

Well, one possibility is that you have gotten the resultset index values wrong. If index 1 in the resultset corresponded to a value from a CHAR or VARCHAR or similar field, then your JDBC driver could return a "binary stream" consisting of a bunch of encoded text. You could see those characters for a number of character encoding schemes that the database could be using for storing text, including ASCII, LATIN-1 and UTF-8.

这篇关于java.io.StreamCorruptedException:无效的流头:4920616D的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆