ark*_*ark 0 java serialization
我遇到以下代码问题.序列化对象似乎有效,但是当我尝试反序列化它时,方法in.available()立即返回0(它不会进入while循环).由于(de)序列化逻辑是从这里复制的,我想它应该可行.
public class test {
public static enum Direction {NONE, UP, DOWN, LEFT, RIGHT}
/**
* @param args
*/
public static void main(String[] args) {
LinkedList<Node> list = new LinkedList<Node>();
list.add(new Node(1.0, 0));
list.add(new Node(2.0, 0));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream out;
try {
out = new ObjectOutputStream(baos);
for(Node l:list)
out.writeObject(l);
baos.close();
out.close();
byte[] bytes = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInput in;
in = new ObjectInputStream(bais);
while (in.available() > 0) {
Node l = (Node) in.readObject();
}
bais.close();
in.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
class Node implements Serializable {
double val;
int index;
public Node(double val, int index) {
this.val=val;
this.index=index;
}
}
Run Code Online (Sandbox Code Playgroud)
不要用InputStream.available()
.它几乎永远不会做你想要它做的事情.你基本上必须只调用readObject并捕获当没有更多数据要读取时抛出的IOException(可能是EOFException的一个实例).
或者,您可以先ObjectOutputStream.writeInt()
使用您拥有的节点数进行调用,然后阅读该节点,ObjectInputStream.readInt()
以便了解预期的节点数.
归档时间: |
|
查看次数: |
174 次 |
最近记录: |