ACM中Java输入输出

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ACM中Java输⼊输出
最初写算法时,是⽤Scanner的。

因为当时接触的测试数据基本都是以算法的复杂度为主,但是后⾯遇到⼤量的输⼊数据时。

发现Scanner 远远不能满⾜条件。

下⾯列出⼏种常⽤的输⼊输出⽅式。

(输出统⼀⽤printwriter,系统的system.out太慢,结尾要释放缓存才能输出,不然数据放在缓存中输不出来)
1:Scanner 这个类最慢,但是最好⽤,因为这个类没有缓存处理,所以io⽅⾯⼤量输⼊读取特别慢。

Scanner sc=new Scanner(System.in);
PrintWriter out =new PrintWriter(new OutputStreamWriter(System.out));
2:bufferedreader这个类最不⽅便,但是可以满⾜⼤部分输⼊速度的需求,输⼊缺点就是只能按⾏读取数据,必要时需要字符串分割,转成int以及其他类型还需要转换。

BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
PrintWriter out =new PrintWriter(new OutputStreamWriter(System.out));
这种输⼊⽅式只能输⼊字符串然后分割处理等等,效率⽐Scanner⾼很多
3:StreamTokenizer这个类最快,相对第⼆种也好⽤很多,他的底层是⽤字符分割⽤,但是这样处理有很⼤局限性。

输⼊string类型除了纯字母。

否则混合输⼊会出错,特殊符号在字符串中输⼊也不⾏。

StreamTokenizer in=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter out =new PrintWriter(new OutputStreamWriter(System.out));
in.nextToken();int n=(int)in.nval;
in.nextToken();long p=(long)in.nval;
in.nextToken();double q=in.nval;
out.print(n);
out.flush();
这种输⼊⽅式效率最⾼,巨⼤的输⼊量也能快速处理。

下⾯附上同⼀个题*(百度之星2018资格赛1002三种输⼊的时间差距)
Scanner超时
bufferedreader
Streamtokenizer最快
其中bufferedreader最难⽤,Scanner最好⽤,但是streamtokenizer最快,刚开始可能⽤的不习惯,但是习惯就好了,毕竟这个影响太⼤了,⾄于输出。

系统输出太慢。

⼤量数据还会超时。

相关文档
最新文档