1

我用java编写了一个服务器/客户端应用程序。现在我必须创建一个测试组件来与服务器交互。测试组件本身包含一个处理客户端实例的类(每个都有一个 ProcessBuilder)。

现在问题来了:为了解析服务器响应(找到响应的结尾),我关闭了转义序列中的特定行(例如 \t\b)。这按预期工作,但在向服务器发送特定命令之前,我必须清除 InputStream(丢弃流中的所有内容,如日志条目、状态消息等)。

//input=process.getInputStream();
//out = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));

public String send(String command){
    log.info("execute: " + command);

    try{
        //clear old output
        int chars = input.available();

        log.info("Skip " + chars + " characters from process output.");
        input.skip(chars);

        out.write(command + "\n");
        out.flush();

    }catch (IOException e){
        log.error("could not write to process", e);
    }

    BufferedReader reader = new BufferedReader(new InputStreamReader(input));
    StringBuilder str = new StringBuilder();

    String line;

    try {
        while( (line = reader.readLine()) != null ){
            log.info("new line " + line);

            if(line.contains("\t\b")){
                //skip others
                input.skip(input.available());
                break;
            }
        }
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    return str.toString();
}

但这不起作用。

示例输出

0    [main] INFO  loadtesting.ClientHandler  - ClientHandler started 1543748404 (localhost 9000 )
6    [main] INFO  loadtesting.ClientHandler  - execute: somecommand
 6    [main] INFO  loadtesting.ClientHandler  - Skip 0 characters from process output.
 112  [main] INFO  loadtesting.ClientHandler  - new line Connection successfully
 113  [main] INFO  loadtesting.ClientHandler  - new line no entries available\t\b

“连接成功”应该被丢弃。

113  [main] INFO  loadtesting.ClientHandler  - execute: somecommand
 113  [main] INFO  loadtesting.ClientHandler  - Skip 0 characters from process output.
 114  [main] INFO  loadtesting.ClientHandler  - new line no entries available\t\b

114  [main] INFO  Test  - Test: close
 114  [main] INFO  loadtesting.ClientHandler  - ClientHandler Closed 1543748404
 114  [main] INFO  loadtesting.ClientHandler  - und ciao

更新 我发现了问题,但没有解决方案。这是因为 InputStream 的可用方法总是返回 0:

InputStream 类的可用方法总是返回 0。

现在我将搜索 IS 的一个子节点,它实现了 available()。

4

0 回答 0