Java将ObjectInputStream结果转换为ArrayList

时间:2016-06-01 16:16:01

标签: java arraylist

有没有办法将OutputStream一次强制转换为ArrayList?

我正在测试这里的东西以及我所得到的东西:

书写:

// Some list
List<Edge> edges = = new ArrayList<>(); 
edges.add(new Edge...)
edges.add(new Edge...)
...

OutputStream outStream = socket.getOutputStream();
ObjectOutputStream out = new ObjectOutputStream(outStream);
out.writeObject(edges);

InputStream inStream = socket.getInputStream();
ObjectInputStream in = new ObjectInputStream(inStream);
Object inObject = in.readObject();
if (inObject.getClass() == ArrayList.class) {
   System.err.println("IS LIST");
   List<Edge> edges = (List<Edge>) in.readObject();
}

结果

IS LIST
Jun 01, 2016 6:15:05 PM client.Client main
SEVERE: null
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2608)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1319)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
at client.Client.main(Client.java:86)

2 个答案:

答案 0 :(得分:2)

EOFException是&#34;文件结尾&#34;例外。这意味着当没有更多数据要读取时(已经在文件末尾),您试图读取数据。

之所以发生这种情况,是因为您正在阅读2个对象,但您只是发送了1.而不是第二次调用in.readObject(),只需投放您已经读过的对象:

list = (List<Edge>) inObject;

答案 1 :(得分:-1)

我担心流是一段时间内可用的数据序列,而ArrayList是立即可用的数据集合。

因此,将一个转换为另一个(虽然从类层次结构的角度来看是不可能的)是没有任何意义的。

请阅读Java中的流及其API。