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%保证。
答案 0 :(得分:1)
问题是您的读取超时。如果发生这种情况,您可能会丢失数据。如果readLine()
在一行中间超时,则到目前为止读取的部分将丢失。如果将它设置得太短,则会丢失大量数据,并且您将其设置得太短。你应该把它设置得更高,或者根本不使用它。