【发布时间】:2019-05-17 07:52:03
【问题描述】:
我的问题中的重要词是 interactive:对于编程竞赛(UVa 在线评委),我正在编写交互式 java 代码:它在 System.out 上输出并等待 System.out 上的响应。在。
我想测试这段代码的速度,但如果我手动进行交互,我的人工打字技能会减慢执行速度,并且测量会有偏差。
因此,我想要一个线程/app/script/whatever,当我的应用程序在 System.out 上写入时看到,(这个线程/app/script/whatever)然后写入我的应用程序使用它的 System.in 读取的东西.
我的应用程序应该使用 System.in 和 System.out 进行通信,因为一旦我将它提交给在线评委,它就会被评判。
我认为多线程无法完成这项工作,因为 System.in 总是从键盘读取,而不是从另一个线程读取。
import java.util.Scanner;
public class Main {
public static void main(final String[] args) {
System.out.println("What now?");
final Scanner scanner = new Scanner(System.in);
final String response = scanner.nextLine();
scanner.close();
System.out.println("Finished: " + response);
}
}
如何在没有人在键盘上输入的情况下运行此代码?
【问题讨论】:
-
这段代码的速度基本无关。时间以JVM启动时间为准。
-
我要测试的不是这段代码。这是一个示例,以便您了解我想要做什么。我的代码更长,并且有多个 System.in 调用。
-
如果您使用的是 linux。你可以使用这个命令来检查花费的时间:
time java MyClass < put_input_in_this_file.txt -
另外,如果你想测试代码的性能,你只需要测量相关的业务逻辑。从上到下衡量一切是没有意义的。尤其是在需要用户输入的情况下,因为理论上这可能需要无限时间。
-
@Saket Santosh Patel 可能会这样做。我只是不确定它是否会起作用,因为使用您的方法,我无法决定何时从
put_input_in_this_file.txt读取每一行。我今晚看看它是否有效。
标签: java performance testing interactive