InetAddress host = InetAddress.getLocalHost();
Socket link = new Socket(host, Integer.parseInt(args[0]));
System.out.println("before input stream");
ObjectInputStream in = new ObjectInputStream(link.getInputStream());
System.out.println("before output stream");
ObjectInputStream out = new ObjectOutputStream(link.getOutputStream());
“输入流之前”是cmd-line上的最后一个生命值。没有抛出异常。为什么会这样?我不明白......
args [0]是5000。 //编辑:flush没有帮助。
答案 0 :(得分:18)
这是因为如果inputStream为空,ObjectInputStream(InputStream in)
- 构造函数是一个阻塞调用。
创建一个从指定的InputStream读取的ObjectInputStream。从流中读取序列化流头并进行验证。此构造函数将阻止,直到相应的ObjectOutputStream已写入并刷新标头。
答案 1 :(得分:0)
可能,
link.getInputStream();
可能返回null,但是应该通过查看类文件返回错误。 我注意到的另一件事是,你宣布:
ObjectInputStream out = new ObjectOutputStream(link.getOutputStream());
从此开始,您将ObjectInputStream声明为没有强制转换的ObjectOutputStream(此处不合适)
你应该尝试:
ObjectOutputStream out = new ObjectOutputStream(link.getOutputStream());
这应该有效,因为脚本可能会对System.out进行排队,但在初始化之前请注意错误。
告诉我这是否有效:D