scanner和BufferedReader

.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代码  收藏代码
  1. 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了

 

 

posted @ 2015-09-05 11:38  fthjane  阅读(361)  评论(0编辑  收藏  举报