📅  最后修改于: 2023-12-03 14:42:54.327000             🧑  作者: Mango
在Java编程中,我们经常需要从标准输入或文件中读取输入。但是Java自带的输入流读取速度较慢,在一些竞赛或性能要求高的场合,需要使用更快的输入方式。
FastReader是一种更快速的Java输入方式,可以在比标准输入流更快的速度读取输入数据。
FastReader的实现是基于Java的BufferedReader和InputStreamReader。FastReader的构造函数可以接收一个InputStream对象,如下所示:
class FastReader {
BufferedReader br;
StringTokenizer st;
public FastReader(InputStream stream) {
br = new BufferedReader(new InputStreamReader(stream), 32768);
st = null;
}
}
在构造函数中,我们初始化了一个BufferedReader和一个StringTokenizer对象。BufferedReader可以读取更快的输入数据,而StringTokenizer可以有效地拆分输入数据。
我们还可以添加一些方法来读取不同类型的数据。
class FastReader {
BufferedReader br;
StringTokenizer st;
public FastReader(InputStream stream) {
br = new BufferedReader(new InputStreamReader(stream), 32768);
st = null;
}
String next() { // 读取下一个字符串
while (st == null || !st.hasMoreElements()) {
try {
st = new StringTokenizer(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() { // 读取下一个整数
return Integer.parseInt(next());
}
long nextLong() { // 读取下一个长整数
return Long.parseLong(next());
}
double nextDouble() { // 读取下一个Double
return Double.parseDouble(next());
}
String nextLine() { // 读取下一行
String str = "";
try {
str = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return str;
}
}
这几个方法分别可以读取字符串、整数、长整数、双精度浮点数和一整行数据。
使用FastReader也很简单,只需要在需要读取输入数据的地方创建一个FastReader对象并调用方法即可。
FastReader in = new FastReader(System.in);
int n = in.nextInt();
String str = in.next();
double d = in.nextDouble();
FastReader是一种更快速的Java输入方式,可以在比标准输入流更快的速度读取输入数据。它的实现基于Java的BufferedReader和StringTokenizer对象,在需要读取输入数据时可以快速读取不同类型的数据。在竞赛或性能要求高的场合,使用FastReader可以提高程序的运行效率。