【发布时间】:2020-06-03 10:03:57
【问题描述】:
我正在插入一个从解组 xml 中获得的可序列化对象。对于插入对象,我使用以下方法,即 insertPOJOInBackend()。但是,在使用方法 readPOJOFromBackend() 检索对象时,我收到了 EOFException。在过去的一周里,我一直在为这个例外而苦苦挣扎。我们将不胜感激。
insertPOJOInBackend(String key, String url, Serializable Object){
//obtained connection object
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new
BufferedOutputStream(connection.getOutputStream()));
objectOutputStream.writeObject(serializableObject);
objectOutputStream.close();
BufferedReader rd = null;
StringBuilder sb = null;
String line = null;
rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
sb = new StringBuilder();
while ((line = rd.readLine()) != null) {
sb.append(line);
}
}
readPOJOFromBackend() {
HttpsURLConnection connection = null;
try
{
//obtained connection object
ObjectInputStream objectInputStream = new ObjectInputStream(new
BufferedInputStream(connection.getInputStream()));
connection.getInputStream().close();
responseObject = objectInputStream.readObject();
objectInputStream.close();
}
catch (EOFException eof)
{
LOG.error("EOFException");
}
}
我是否为 ObjectInputStream 过早关闭了输入流,或者请检查我哪里出错了?如果您需要任何其他信息,请告诉我。 我在调用 objectInputStream.readObject 时收到 EOFException。 PFB 堆栈跟踪。
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2669)
at java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(ObjectInputStream.java:3413)
at java.io.ObjectInputStream$BlockDataInputStream.readUTF(ObjectInputStream.java:3214)
at java.io.ObjectInputStream.readString(ObjectInputStream.java:1896)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1558)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2276)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2200)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2058)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:426)
at java.util.ArrayList.readObject(ArrayList.java:778)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1159)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2167)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2058)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2276)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2200)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2058)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:426)
at java.util.ArrayList.readObject(ArrayList.java:778)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1159)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2167)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2058)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2276)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2200)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2058)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2276)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2200)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2058)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2276)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2200)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2058)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:426)
at **.**.**.common.backend.impl.BackednImpl.readPOJOFromBackend(XXXXXImpl.java:812)
【问题讨论】:
-
connection.getInputStream().close();- 你得到 InputStream 并立即关闭它。读取对象后将其移至。 -
你忘记贴发送代码了,很明显在发送对象之前已经关闭了连接。
标签: java serialization objectinputstream eofexception