Java进阶模块
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();
}
}