Java读取键盘输入常用的3种方式
Scanner(java.util.Scanner)
精准且简单,处理小数据好用,一开始学的读取键盘输入方法
原理:1.读字节 2.转字符 3.正则匹配 4.自动类型转换 5.同步锁 6.创建大量临时对象
Scanner = BufferedReader + 正则 + 自动解析
BufferedReader(java.io.BufferedReader)
处理字符串和中等数据,缺点是只能读字符串并且需要手动parseInt
原理:1.从 OS 一次读一大块字节 2.放入内存缓冲区 3.按字符解码 4.程序从缓冲区取数据 本质就是把数据从OS一个个读取变成只读一次,将数据转移到内存之后程序直接从内存里获取数据,省略了很多冗余步骤。
StreamTokenizer(java.io.StreamTokenizer)
速度快、适合大数据,无正则、无 GC 压力,缺点是不好读字符串
它本质上是一个极简的词法分析器,它并不把输入当作“对象”来处理,而是将其视为字符流。不断调用 read()读取下一个字符,如果是空白字符(空格、换行),直接丢弃,直到遇到第一个非空白字符,所以它无法读取换行和空格。
Scanner.nextInt()内部可能会先把字节解码成字符,再构建 String对象,最后调用 Integer.parseInt()。这会产生临时 String对象,用完即丢,触发GC(垃圾回收开销)。StreamTokenizer.nextToken()不会产生这样的临时对象,也就没有GC
BufferdReader和StreamTokenizer常用模板:
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StreamTokenizer st = new StreamTokenizer(br);
static {
st.ordinaryChar('-'); // 支持负数
}
static int nextInt() throws IOException {
st.nextToken();
return (int) st.nval;
} // 输入整数
static String nextWord() throws IOException {
st.nextToken();
return st.sval;
} // 输出字符串
更多推荐

所有评论(0)