JCoder-Pro / FeedBack

This repository is for collecting feedback from JCoder users. Your feeling and feedback matter.
5 stars 1 forks source link

基于IO的评测使用`java.io.InputStreamReader`为输入方式的时候,关闭流的时候报出RE #5

Open YeeTone opened 2 years ago

YeeTone commented 2 years ago

考虑ID为#41670#41677的提交,使用java.io.InputStreamReader为输入方式的提交,源代码如下:

//41670
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = br.read();
        System.out.println(n);
        br.close();
    }
}
//41677
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {

        InputStreamReader ir = new InputStreamReader(System.in);
        int n = ir.read();
        System.out.println(n);
        ir.close();
    }
}

这两段代码的功能是一致的,从System.in读入一个字节并输出ASCII码值。 由于代码逻辑不符合题面要求,因此判题结果应当是Wrong Answer,但先后两次的运行结果均报出的不正常的RE,这是本地运行没有出现过的,报错信息如下所示:

41670:

41670

41677:

41677

经过与代码的行数对应,发现是Reader在close的时候出现问题。(询问DSAA 22春的相关情况,发现使用Java快读时并无此种报错)

该错误的出现是否可能使得Java语言的快读模板的使用受到影响?

liuxukun2000 commented 2 years ago

您好,我查看了一部分DSAA用户提交的代码,他们的快读快写只关闭了输出流,没有关闭输入流。我推测可能原因在于沙箱阻止了对输入文件的操作。但实际上,在有读取权限的情况下关闭fd不应该有任何问题,更何况是输入流。

这种情况让我也十分困惑,单就目前表现来看,我认为沙箱造成这一原因的可能最大,但具体成因未知。