scanner和BufferedReader
2015-09-05 11:38
344 查看
.scanner .BufferReader: inputstream; outputstream .BufferWriter: BufferedReader-->InputStrean-->FileInputStream BufferWriter-->OutputStrean-->FileOutputStream Scanner sc = new Scanner (System.in); String str = sc.next(); Scanner读取数据是按空格符,这其中包括空格键,Tab键,Enter键。只要遇到其中之一,Scanner的方法就会返回下一个输入 BufferedReader stadin = new BufferedReader(new InputStreamReader(System.in)); String input = stadin.readLine(); n=Integer.parseInt(input); readLine()是按Enter回车来读取一行数据的,只要在回车键之前的都会被readLine();方法返回 要使用BufferReader输入一些字符之外的类型的数据,就要相对比较麻烦,需要通过 一些XXXX.parseXxx(); 来转换相应的数据类型,虽然,麻烦一些,但通过在一些OJ系统上的和Scanner作对 比,BufferReader的效率要 比Scanner高一倍,这个差距可想而知,读取的数据越多,效果就越明显
BufferedReader和BufferedWriter
1. java.io.BufferedReader和java.io.BufferedWriter类各拥有8192字符的缓冲区。当 BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。如 果缓冲区数据不足,才会再从文件中读取,使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中。如果缓冲区中的数 据满了,才会一次对目的地进行写出。
2. 从标准输入流System.in中直接读取使用者输入时,使用者每输入一个字符,System.in就读取一个字符。为了能一次读取一行使用者的输入,使 用了BufferedReader来对使用者输入的字符进行缓冲。readLine()方法会在读取到使用者的换行字符时,再一次将整行字符串传入。
3. System.in是一个位流,为了转换为字符流,可使用InputStreamReader为其进行字符转换,然后再使用BufferedReader为其增加缓冲功能。例如:
Java代码
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
下面的示例示范了BufferedReader和BufferedWriter的使用。可以在文字模式下输入字符,程序会将输入的文字存储至指定的文件中,如果要结束程序,输入quit字符串即可。
package ysu.hxy; import java.util.*; import java.io.*; public class BufferedReaderWriterDemo { public static void main(String[] args) { try { //缓冲System.in输入流 //System.in是位流,可以通过InputStreamReader将其转换为字符流 BufferedReader bufReader = new BufferedReader(new InputStreamReader(System.in)); //缓冲FileWriter BufferedWriter bufWriter = new BufferedWriter(new FileWriter(args[0])); String input = null; //每读一行进行一次写入动作 while(!(input = bufReader.readLine()).equals("quit")) { bufWriter.write(input); //newLine()方法写入与操作系统相依的换行字符,依执行环境当时的OS来决定该输出那种换行字符 bufWriter.newLine(); } bufReader.close(); bufWriter.close(); } catch(ArrayIndexOutOfBoundsException e) { System.out.println("没有指定文件"); } catch(IOException e) { e.printStackTrace(); } } }
运行结果:
D:\hxy>java ysu.hxy.BufferedReaderWriterDemo test2.txt
fsdafjads;fa
fasdfas
asdfdaf
asd
fdas
fds
fa
df
asdf
dasff
adsf
a
fasd
quit
会在目录下产生一个文件test2.txt,并在其中写入刚才输入的内容。
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("infilename")));
不管你从磁盘读,从网络读,或者从键盘读,读到内存,就是InputStream。
写文件
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("outfilename")));
in和out都是针对内存为中心说的,内存写到磁盘,是out;从磁盘读到内存,是in
从屏幕数输入到内存,in;从console打印出来,是System.out
同样socket编程用到更多的IO,这里分别用Server(服务器端)和Client(客户端)来说明
Server: 遇到请求,网络----->内存 IN 服务器应答, 内存------->网络 OUT
----------------------------------------------------------------------------------------------
Client: 请求服务, 内存----->网络 OUT 服务器应答, 网络------->内存 IN
内存的数据出去了就是out 外设的东西到内存了就IN了
相关文章推荐
- HTML设置超链接字体颜色和点击后的字体颜色
- Sublime Text通过插件编译Sass为CSS及中文编译异常解决
- JS事件代理
- HDU3694 Fermat Point in Quadrangle(求四边形费马点)
- CSS基础知识
- 很火的ES5(js数组函数)初体验
- 学习笔记-AngularJs (一)
- js 获取页面内容可见区域的高度和宽度
- 揭秘AngularJS工作原理
- SharedPreferences总结
- PASSION之CSS3中2D,3D转化
- Ajax-JS
- ThinkCMF框架写接口时不能正确输入json字符串而是带上了网页源码怎么办?
- 试卷: 阿里巴巴2016前端开发工程师笔试(一)
- css3新特性
- js实现图片放大和拖拽特效代码分享
- 将JSON对象转化为数组对象
- JAVA的StringBuffer类
- 前端路上的各种问题-javascript—7
- js怎么跳转页面?