java.io.StreamCorruptedException:无效的流头:4920616D [英] java.io.StreamCorruptedException: invalid stream header: 4920616D
问题描述
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屋!