2015-12-23 3 views
1

hi Когда я пытаюсь читать blob, получая исключение. Я размещение как пишут в БД и адресность Д.Б. любезно предложить, его вызывает слишком много проблемы ..java.io.StreamCorruptedException: недопустимый заголовок потока: 4920616D

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()); 
      } 

Пробовал все случаи, приведенные в StackOverflow и других блогах. все еще не понимают точных вопросов.

ответ

4

Позволяет начать с 4920616D. Если вы декодируете это как символы ASCII, вы получите «Я есть» ... Английский текст. Теперь это может быть совпадением, но допустим, что это не так.

Что может привести к появлению текста, где вы ожидаете сериализованного объекта?

Ну, одна из возможностей заключается в том, что вы неправильно указали значения индекса результатов. Если индекс 1 в наборе результатов соответствует значению из CHAR или VARCHAR или аналогичного поля, то ваш драйвер JDBC может вернуть «двоичный поток», состоящий из связки закодированного текста. Вы можете увидеть эти символы для ряда схем кодирования символов, которые база данных могла бы использовать для хранения текста, включая ASCII, LATIN-1 и UTF-8.

+0

Спасибо, что ответили, я понял, какая из наборов результатов и поток недействителен. но то же самое работает, если я получаю 10 записей за раз, если вы получаете 50 записей, имеющих только проблему. для этого любое решение есть. PLS очистить меня, что другие способы разобраться. спасибо. Chandu – Chandu

+1

Мы не можем предоставить вам больше помощи, если вы не предоставите нам MCVE (http://stackoverflow.com/help/mcve), которые позволят нам самим видеть, что происходит. –

+0

уверенный Стивен, постарается поставлять с MCVE .. :-) – Chandu

Смежные вопросы