readLine()在许多情况下都可以正常工作,但是几次,我通过BufferedReader.readLine()读取的行是不完整的行。 This问题谈论类似的问题。但是,解决方案并不令人满意。那里的一个解决方案说,这可能是因为EOF特性。但就我而言,我根本没有发送任何EOF字符。以下是我的代码:
/*Sending Code*/
public void sendToLocalDaemon(String msg){/*msg have no New line or \r*/
localMachineWriter.println(msg);
}
/*Receiving Code*/
public int receiveFromCoordinator(){
String response = "";
while(true){/*Each message separated from new line will have its independent meaning.*/
try{
coordinator.setSoTimeout(1);
try{
response = coordinatorReader.readLine();
}
catch(java.net.SocketTimeoutException e){
response = null;
}
if(response == null){
return coordinatorsMessage.size();
}
coordinatorsMessage.add(response);
}
catch(IOException e){
log(e.getMessage());
//System.exit(0);
}
}
}
/*This is how I set reader and writer*/
public void setReaderWriter() throws IOException{
this.coordinatorWriter = new PrintWriter(coordinator.getOutputStream(),true);
this.coordinatorReader = new BufferedReader(new InputStreamReader(coordinator.getInputStream()));
}
请以某种方式建议我以使其正常工作。或建议我以其他方式阅读全文,并提供100%保证。
最佳答案
问题是您的读取超时。如果发生这种情况,您可能会丢失数据。如果readLine()
在一行中间超时,则到目前为止已读取的部分将丢失。如果将其设置得太短,则会丢失大量数据,而将其设置得太短。您应该将它设置得更高,或者根本不使用它。
关于java - Java Socket.readLine()并不总是读取由newLine分隔的整个消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37662995/