您的位置:首页 > Web前端

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了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: