Java 客户端在使用流和lambda表达式打印字符串时卡住
在服务器端,我有:Java 客户端在使用流和lambda表达式打印字符串时卡住,java,lambda,stream,client,Java,Lambda,Stream,Client,在服务器端,我有: bookDataCollection.forEach((isbnL, bookDataL) -> outputCharToNetwork.println(bookDataL.getTitle())); inputCharFromNetwork.lines().forEach(System.out::println); 将字符串发送到客户端。 我测试了它,效果很好。我想要的集合中的所有字符串都将发送到客户端 在客户端,我有: bookDataCollection.fo
bookDataCollection.forEach((isbnL, bookDataL) -> outputCharToNetwork.println(bookDataL.getTitle()));
inputCharFromNetwork.lines().forEach(System.out::println);
将字符串发送到客户端。我测试了它,效果很好。我想要的集合中的所有字符串都将发送到客户端 在客户端,我有:
bookDataCollection.forEach((isbnL, bookDataL) -> outputCharToNetwork.println(bookDataL.getTitle()));
inputCharFromNetwork.lines().forEach(System.out::println);
这给我带来了麻烦。我从服务器上收到了所有书名的列表,如下所示:
唐吉诃德2001年:太空漫游
霍比特人 光标在新行,客户机卡住了在我能看到的范围内等待着什么。
客户端的正确行是什么 添加:
inputCharNetwork
和outputCharNetwork
的定义如下:
BufferedReader inputCharNetwork = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter outputCharNetwork = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
所以
lines()
正在等待另一行;怎么知道名单是完整的?我想这可能是个问题。我认为服务器应该发送一些数据发送结束的通知。事实上,流应该以这种方式工作:lines()
正在读取,而它有一些东西(惰性操作),在终止操作执行之后-在这种情况下,forEach()
-完成该行。那么您希望发生什么呢?你读了所有的行并打印出来。我希望客户端程序继续运行,在下一行代码中。。。当然