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/

10-13 07:25