Java io StreamTokenizer的使用小结

StreamTokenizer
double navl ——> 如果当前标记是一个数字,则此字段将包含该数字的值。
String sval ——> 如果当前标记是一个文字标记,则此字段包含一个给出该文字标记的字符的字符串。
static int TT_EOF ——>指示已读到流末尾的常量。
static int TT_EOL ——->指示已读到行末尾的常量。
static int TT_NUMBER——->指示已读到一个数字标记的常量。
static int TT_WORD ——-> 指示已读到一个文字标记的常量。
int ttype ——–> 在调用 nextToken() 方法之后,此字段将包含刚读取的标记的类型。
The StreamTokenizer class takes an input stream and parses it into “tokens”, allowing the tokens to be read one at a time,这些符号的拆分是按照空格来确定的。

查阅官方文档得知,它是不把数字作为字符处理的。它能取得的字符串是以大小写字母为内容的。
换行符也会被视作空格。

Java 输入输出效率优化黑科技get

刚开始,用最常规的输入输出:

import java.util.*;
Scanner scan=new Scanner(System.in);
System.out.println("...");

面对海量输入输出数据,TLE妥妥的

接着有了下面这种姿势(输入流?):

import java.util.*;
import java.io.*;
Scanner scan=new Scanner(new BufferedInputStream(System.in));

效果不太理想。
最后查阅大神用于处理水题的代码,获得以下终极模板:

import java.io.*;
/*...*/
public static void main(String[] args) throws IOException {
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
while(in.nextToken() != StreamTokenizer.TT_EOF){
    n=(long)in.nval;
    in.nextToken();
    m=(long)in.nval;
    out.println(n+" "+m);
}
out.flush();//刷新。若本行放循环体内,则毎输入一组数据即输出一组答案,但是效率降低
out.close();
}