1.Scanner/System.out.print()
效率较低,数据范围较小时使用Scanner
读入数据。方便好写。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
System.out.print(a);
}
}
2.BufferedReader/BufferedWriter
效率较高,数据范围较大时使用,需要抛异常,输出后需要刷新缓冲区。但是对于内存限制较为严重时(洛谷)需要考虑第3种。
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String[] s = br.readLine().split(" "); //快速,但存在额外内存消耗
int a = Integer.parseInt(s[0]);
bw.write(a + "\n");
bw.flush();
}
}
3.StreamTokenizer/PrintWriter
StreamTokenizer
可以在BufferedReader
的基础上优化,使之拥有BufferedReader
的速度和Scanner
的便捷度。关键的是,StreamTokenizer
可以不必像BufferedReader
一样用String[] s = br.readLine().split(" ");
的方式去拆解字符串获取int
型数据,因此节约不少内存。PrintWriter
跟BufferedWriter
原理相似,二者在使用时可以等效。
import java.io.*;
public class Main {
static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
static int nextInt() throws IOException {
in.nextToken();
return (int) in.nval;
}
public static void main(String[] args) throws IOException{
int a = nextInt(); //便捷,快速,但写起来麻烦
out.print(a + "\n");
out.flush();
}
}