在算法竞赛中,根据题目类型的不同,读入数据和输出数据的类型和数据量也不同,有时候,掌握各种各样的输入输出可以让你赢在起跑线上,不至于因为输入数据或者输出数据就超时了。因为c的快读快写网上教程已经很多了,下面我写一些java常用的输出输出方法。这篇博客面向的是一些算法入门的萌新写的,简单介绍了下各种输入输出的优缺点。
输入
第一种,最常见,但是也很费事.简单的输入可以用这种但是慢
Scanner sc = new Scanner(System.in);
第二种,也比较简单,稍微比第一种快些,但是会耗费内存
Scanner cin = new Scanner(new BufferedInputStream(System.in));
第三种,运用InputStream 输入速度会快很多,竞赛常用的输入方法。不过后续的数据处理就没有前面两种那么直接,碰到整型需要转换。
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
第四种,最快,但是更难用,一般很少用
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
另外有时候我们有时候会需要从文件中读入数据,一个原因是有时候题目的数据是在文件里,另一个原因是有时候在控制台边读入边输出有时候会发生混乱,所以分开读入和输出
(1)用Scanner
File file = new File("D:\\input.txt");
Scanner sc = new Scanner(file);
(2)用BufferReader
File file = new File("D:\\input.txt");
BufferedReader br=new BufferedReader(new FileReader(file));
输出
第一种,最标准的输出方法,一般输出也用这个
System.out.println(); //如果去掉ln就是不换行
第二种,C语言风格的输出
System.out.printf();
第三种,快速输出,当输出的数据很大时,用这个,并且一定要关闭close,不然会输出错误
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
out.close();
向文件输出数据,和向文件读入数据其实是一个道理
(1)用PrintStrem
PrintStream ps=new PrintStream(new FileOutputStream("D:\\output.txt"));
System.setOut(ps); //可以使输出在文件而不是控制台
(2)用PrintWrite
File file =new File("D:\\output.txt");
PrintWriter pw=new PrintWriter(file);
pw.print("dd");
pw.close();
除了上面的常见的输入输出,有些大佬为了追求极致的速度,会使用输入输出挂,但我这里就不再介绍了,因为代码量很多,一般在极少数情况才要使用,下面放出一种输入挂,仅供参考。
class InputReader{
StreamTokenizer tokenizer;
public InputReader(InputStream stream){
tokenizer=new StreamTokenizer(new BufferedReader(new InputStreamReader(stream)));
tokenizer.ordinaryChars(33,126);
tokenizer.wordChars(33,126);
}
public String next() throws IOException {
tokenizer.nextToken();
return tokenizer.sval;
}
public int nextInt() throws IOException {
return Integer.parseInt(next());
}
public long nextLong() throws IOException {
return Long.parseLong(next());
}
public boolean hasNext() throws IOException {
int res=tokenizer.nextToken();
tokenizer.pushBack();
return res!=tokenizer.TT_EOF;
}
public BigInteger nextBigInteger() throws IOException {
return new BigInteger(next());
}
}