有没有办法将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)
答案 0 :(得分:2)
EOFException
是&#34;文件结尾&#34;例外。这意味着当没有更多数据要读取时(已经在文件末尾),您试图读取数据。
之所以发生这种情况,是因为您正在阅读2个对象,但您只是发送了1.而不是第二次调用in.readObject()
,只需投放您已经读过的对象:
list = (List<Edge>) inObject;
答案 1 :(得分:-1)
我担心流是一段时间内可用的数据序列,而ArrayList是立即可用的数据集合。
因此,将一个转换为另一个(虽然从类层次结构的角度来看是不可能的)是没有任何意义的。
请阅读Java中的流及其API。