데이터베이스에서 내 자신의 클래스 "BallotPaper"의 특정 개체를 올바르게 검색하는 데 문제가 있습니다. 올바르게 보존하지만, ObjectInputStream 작성시에 예외가 Throw됩니다.데이터베이스에서 개체를 검색하는 동안 Java, JDBC : StreamCorruptedException
물론 비슷한 질문과 답변을 많이 읽었지만 여전히 해결할 수 없습니다.
데이터베이스에서 나는 내 개체를 저장하는 bytea 형식의 열 (postgreSQL)이있는 테이블을 가지고 있습니다.
//Saving the object 'paper' of the class 'BallotPaper'
PreparedStatement st = connection.prepareStatement(query);
ByteArrayOutputStream byos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(byos);
oos.writeObject(paper);
byte[] bytePaper = byos.toByteArray();
st.setBytes(1, bytePaper);
st.executeUpdate();
byos.close();
oos.close();
st.close();
//Trying to retrieve the object:
String query2 = "SELECT paper FROM voters WHERE id="+_id+";";
Statement s = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet r = s.executeQuery(query2);
r.first();
bytePaper = r.getBytes(1);
ByteArrayInputStream b = new ByteArrayInputStream(bytePaper);
ObjectInputStream o = new ObjectInputStream(b); // *
BallotPaper ba = (BallotPaper)o.readObject();
예외가 *로 표시된, 마지막으로 전 라인에서 발생합니다 : 여기
은 여러 줄의 코드입니다.
그것은 그 다음과 같습니다
java.io.StreamCorruptedException: invalid stream header: BB656430
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at slave.VotersDB.saveFilledPaper(VotersDB.java:162)
at slave.ClientThread.prepareResponse(ClientThread.java:50)
at slave.ClientThread.run(ClientThread.java:72)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
모든 답변에 감사드립니다.
oos.writeObject(paper);
oos.flush();
byte[] bytePaper = byos.toByteArray();
ObjectOutputStream
의 출력을 버퍼링 할 수있다 :
불행히도 flush()에서는 작동하지 않습니다. 저장 후 모든 스트림을 닫습니다. – brzeszczot