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

java.io.StreamCorruptedException:无效的流头:4920616D,java,jdbc,file-io,Java,Jdbc,File Io,嗨,当我试图读取blob时遇到异常。我发布了我是如何写进DB并得到DB好心的建议的,这造成了太多的问题 ava.io.StreamCorruptedException: invalid stream header: 4920616D at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:782) at java.io.ObjectInputStrea

嗨,当我试图读取blob时遇到异常。我发布了我是如何写进DB并得到DB好心的建议的,这造成了太多的问题

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());
            }
ava.io.StreamCorruptedException:无效流头:4920616D
位于java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:782)
位于java.io.ObjectInputStream。(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)
位于com.jiit.jfx.persistence.dataaccess.OracleSQLQuery.doOperation(OracleSQLQuery.java:65)
在com.jiit.jfx.persistence.dataaccess.AbstractDAO.execute上(AbstractDAO.java:181)
在com.jiit.jfx.persistence.dataaccess.AbstractDAO.executeSQL(AbstractDAO.java:208)上
在
com.jiit.ngcs.mx.server.model.rail.ASMMessageStore.getASMMessageStore(ASMMessageStore.java:196)
在这里输入代码
阅读BOLB:
公共静态Blob createBlob(对象可序列化)引发PersistenceException{
试一试{
ByteArrayOutputStream bStream=新建ByteArrayOutputStream();
ObjectOutputStream oStream=新的ObjectOutputStream(bStream);
oStream.writeObject(可序列化);
oStream.flush();
oStream.close();
返回createBlob(bStream.toByteArray());
}捕获(例外e){
抛出新的PersistenceException(如getMessage());
}
}
在TypeHelper.java-->createBlob中
私有静态对象readBlob(int索引,ResultSet rs)引发SQLException{
试一试{
InputStream is=rs.getBinaryStream(索引);
如果(is!=null){
ObjectInputStream os=新ObjectInputStream(is);
返回os.readObject();
}
返回null;
}捕获(IOE异常){
e、 printStackTrace();
抛出新的SQLException(例如getMessage());
}catch(classnotfounde异常){
e、 printStackTrace();
抛出新的SQLException(例如getMessage());
}

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

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

什么会导致文本出现在您希望序列化对象的位置


好的,一种可能是您获取的resultset索引值错误。如果resultset中的索引1对应于来自CHAR或VARCHAR或类似字段的值,那么您的JDBC驱动程序可能会返回一个“二进制流”由一组编码文本组成。您可以看到数据库用于存储文本的许多字符编码方案的字符,包括ASCII、拉丁语-1和UTF-8。

让我们从
4920616D
开始。如果您将其解码为ASCII字符,您将得到“I am”…英文文本。这可能是巧合,但假设不是

什么会导致文本出现在您希望序列化对象的位置


好的,一种可能是您获取的resultset索引值错误。如果resultset中的索引1对应于来自CHAR或VARCHAR或类似字段的值,那么您的JDBC驱动程序可能会返回一个“二进制流”由一组编码文本组成。您可以看到数据库用于存储文本的许多字符编码方案的字符,包括ASCII、拉丁语-1和UTF-8。

感谢您的响应,我了解了结果集获取的情况以及无效的流。但如果我一次蚀刻10条记录,如果我只获取了50条记录有问题。对于这个问题,有任何解决方案。请告诉我还有什么其他方法来解决。谢谢。ChanduI/除非您向我们提供MCVE,否则我们无法为您提供更多帮助()这让我们自己看看发生了什么。当然,Stephen,将尝试提供MCVE…-)如果您编写MVCE,有可能有人能够帮助您。我不保证我会。感谢您的回复,我了解了结果集获取和无效流的情况。但在g如果我一次取10条记录,如果我取50条记录只是有问题。对于这一问题,有任何解决方案。请告诉我还有什么其他方法来解决。谢谢。ChanduI/除非您向我们提供MCVE()当然,Stephen会尝试提供一个MCVE…-)如果你写一个MVCE,有可能有人能够帮助你。我不会保证我会。