如果写入内容,请不间断地读取控制台

时间:2016-03-04 19:27:59

标签: java

如何读取java行中的每次输入? 如果使用扫描仪和另一个线程写东西它会破坏。 :(

错误的例子:

Console output: (write hello)
helI'm a thread and I break your sentence!
lo

我知道我可以缓冲System.out,但它应该每次都读取,所以什么时候应该写缓冲输出?

1 个答案:

答案 0 :(得分:0)

尝试使用此课程:

public class Console {

private enum Mode { READ_LINE, PRINT_LINE, PRINT }; // TODO: add more Input & Output Modes
private Scanner scanner;

public Console() {
    scanner = new Scanner(System.in);
}

public String getUserInput() {
    return synchronizedIo(Mode.READ_LINE, null);
}

public void printLine(String text) {
    synchronizedIo(Mode.PRINT_LINE, text);
}

public void print(String text) {
    synchronizedIo(Mode.PRINT, text);
}

private synchronized String synchronizedIo(Mode mode, String text) {
    if (mode == Mode.READ_LINE) {
        return scanner.nextLine();
    } else if (mode == Mode.PRINT_LINE) {
        System.out.println(text);
    } else if (mode == Mode.PRINT) {
        System.out.print(text);
    }
    return null;
}
}

使用这些方法向控制台输入和输出所有输入和输出,输入和输出不应混淆。

Console c = new Console();
c.print("Input: ");
String input = c.getUserInput();
c.printLine("Entered text: " + input);

注意:在您阅读用户输入时,print方法将阻止任何调用线程。