java stdin扩展包_java – 逐行阅读STDIN的最佳方法?

我正在寻找最节省时间的方式逐行阅读STDIN。

第一行是要测试的条件数。

以下所有行都是条件(字符串),最多为10万个字符。

我已经尝试了以下(加上4次90 000个字符的结果:

>带有循环(7255 ms)的扫描仪

Scanner sc = new Scanner(System.in);

int numberOfLines = Integer.parseInt(sc.nextLine());

long start = 0;

int i = 1;

while (i<=numberOfLines){

start = System.currentTimeMillis();

sc.nextLine();

Debug.println((System.currentTimeMillis()-start) + "ms for scanner while");

i++;

}

>结果:

> 3228ms扫描仪

> 2264ms的扫描仪

> 1309ms扫描仪

>扫描器时为454ms

>带循环的扫描仪(7078 ms)

Scanner sc = new Scanner(System.in);

int numberOfLines = Integer.parseInt(sc.nextLine());

long start = 0;

for (int i = 1; i<= numberOfLines;i++){

start = System.currentTimeMillis();

sc.nextLine();

Debug.println((System.currentTimeMillis()-start) + "ms for scanner for");

//i++;

}

>结果:

> 3168ms用于扫描仪

> 2207ms用于扫描仪

> 1236ms的扫描仪

> 467ms的扫描仪

>带循环的BufferedReader(7403 ms)

try {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

int numberOfLines = Integer.parseInt(br.readLine());

long start = 0;

for (int i = 0; i< numberOfLines;i++){

start = System.currentTimeMillis();

br.readLine();

Debug.println((System.currentTimeMillis()-start) + "ms for bufferreader for");

//i++;

}

} catch (Exception e) {

System.err.println("Error:" + e.getMessage());

}

>结果:

> 3273ms用于缓冲读取器

> 2330ms用于缓冲读取器

> 1293ms用于缓冲读取器

> 507ms用于缓冲读取器

> BufferedReader与while循环(7461 ms)

try {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

int numberOfLines = Integer.parseInt(br.readLine());

int i=0;

long start = 0;

while(i< numberOfLines){

start = System.currentTimeMillis();

br.readLine();

Debug.println((System.currentTimeMillis()-start) + "ms for bufferreader while");

i++;

}

} catch (Exception e) {

System.err.println("Error:" + e.getMessage());

}

>结果:

>缓冲读取器的3296ms

> 2358ms缓冲读取器while

>缓冲读取器的时间> 1307ms

>缓冲读取器> 500ms

在调试所花费的时间时,我注意到每次读取后的时间减少。

是否可以限制被初始化的字节(f.e.:如果最大值为100.000个字符,则限制扫描器/缓冲读取器仅初始化100 000个字符,读取后将需要重新填充自己的下一个100 000个字符)

关于这个问题的任何想法都是值得欢迎的。

编辑:添加每个场景的代码以及每行读取的时间。也更改了100.000到100 000阅读更容易。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值