Java进阶模块

Java进阶模块

2023年8月5日 作者 ScotI_Blog

I/O进阶(加速)(来自OIwiki Java 进阶 – OI Wiki (oi-wiki.org)

更高速的输入输出

Scanner 和 System.out.print 在最开始会工作得很好,但是在处理更大的输入的时候会降低效率,因此我们会需要使用一些方法来提高 IO 速度。

使用 Kattio + StringTokenizer 作为输入输出

最常用的方法之一是使用来自 Kattis 的 Kattio.java 来提高 IO 效率。1这个方法会将 StringTokenizer 与 PrintWriter 包装在一个类中方便使用。而在具体进行解题的时候(假如赛会/组织方允许)可以直接使用这个模板。

以下是代码实现:

class Kattio extends PrintWriter {
    private BufferedReader r;
    private StringTokenizer st;
    // 标准 IO
    public Kattio() { this(System.in, System.out); }
    public Kattio(InputStream i, OutputStream o) {
        super(o);
        r = new BufferedReader(new InputStreamReader(i));
    }
    // 文件 IO
    public Kattio(String intput, String output) throws IOException {
        super(output);
        r = new BufferedReader(new FileReader(intput));
    }
    // 在没有其他输入时返回 null
    public String next() {
        try {
            while (st == null || !st.hasMoreTokens())
                st = new StringTokenizer(r.readLine());
            return st.nextToken();
        } catch (Exception e) {}
        return null;
    }
    public int nextInt() { return Integer.parseInt(next()); }
    public double nextDouble() { return Double.parseDouble(next()); }
    public long nextLong() { return Long.parseLong(next()); }
}

实际使用:

class Test {
public static void main(String[] args) {
Kattio io = new Kattio();
// 字符串输入
String str = io.next();
// int 输入
int num = io.nextInt();
// 输出
io.println(“Result”);
// 请确保关闭 IO 流以确保输出被正确写入
io.close();
}
}

Print Friendly, PDF & Email