IO流-输入与输出

什么是流

         Java对于数据的输入输出是以“流”的方式进行的,J2SE提供了各种各样的流,用以获取不同种类的数据。Java.io包中定义了多个流类型来实现输入输出功能,关于IO中的类,具体我们可以查看API文档。API文档在线地址:http://docs.oracle.com/javase/1.5.0/docs/api/index.html


流的基本类型

       J2SE定义的所有流类型,位于java.io包内,分别继承了以下四种抽象流类型。




输入流分类(深色为处理流浅色为节点流)


什么是输入?什么是输出?

      读数据站在文件的角度是输出,但是站在程序的角度是输入。而我们在编程的时候是站在程序的角度进行考虑,所以读数据为输入流InputStream or Reader.(读数据是读到缓冲区中)

将数据输入到内存中。


什么是节点流

    节点流可以从一个特定的数据源(节点)读写数据(如:文件、内存)

    

IO实现文件读取代码示例

  需求:读取一个.java文件

  节点流(输入流):FileInputStream

  

public class FileInputStream{
	public static void main(String[] args){
		int b = 0;
                     FileInputStream in = null;
    try {
                    in=new FileInputStream("f:/360云盘同步/FileInputStream.java");
    } catch (FileNotFoundException e) {
                 System.out.println("找不到指定文件"); 
      System.exit(-1);
    }
 
    try {
      long num = 0;
      while((b=in.read())!=-1){
              System.out.print((char)b); 
              num++;
      }
            in.close();  
            System.out.println();
            System.out.println("共读取了 "+num+" 个字节");
    } catch (IOException e1) {
      System.out.println("文件读取错误"); 
      System.exit(-1);
    }
}

缓冲流


概念:缓冲流要套在相应的节点流上,对数据提供了缓冲功能,提高了读取数据的效率,同时增加了一些新的方法


好处:BufferedReader提供了readline方法用于读取一行数据,newline用于写入一个行分隔符。对于输出的缓冲流,,写出的数据会先在内存中缓存,然后使用flush将数据写出。


注意:缓冲流是套在节点流上的,体现在代码中的形式:

BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\share\\java\\dat2.txt"));  //BufferedWriter套在FileWriter上面
BufferedReader br = new BufferedReader(new FileReader("d:\\share\\java\\dat2.txt"));  //BufferedReader套在FileReader上面

转换流


  定义

  以InputStreamReader举例,我们都知道InputStream为字节流,向里读数据。Reader为字符流,也是向里读数据。但是读数据的方式一个是字节读入,一个是字符读入。字符读入数据当然比字节快的多。为将将字节流转换为字符流,引入转换流,这这成为转换流 TransformIO


最常见的就是键盘输入事件:

BufferedReaderbr=new BufferedReader(new InputStreamReader(System.in));

Stringtype=br.readLine();

System.in实际上是InputStream字节流


小结:流的种类很多,除了以上列举的节点流、转换流、缓冲流还有ObjectIO、PringIO等等,但是无论流以什么样的形式变换,都是为了我们更好、更方便的读取数据。


          


    


评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值