Java的IO结构理解

Java中java.io包中最重要的有五个类和一个接口。 5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable。

OutputStream、InputStream都是抽象类,代表字节流输入输出,是所有字节输入输出类的超类;Writer、Reader代表字符流(适用于纯文本); File代表非流式操作, 不负责数据的输入输出,而专门用来管理磁盘文件与目录,主要用于命名文件、查询文件属性和处理文件目录 ,File类不是前面的类的子类,而是同一级的

FileInputStream、FileOutputStream并不是File类的子类, 而是Output Stream、InputStream的子类,表示对文件的字节操作,采用read()、write()方法对文件进行读写;
相对的 FileReader、FileWriter也不是File的子类,是Reader和Writer的子类。 但是这的4个类的构造方法的参数经常是File对象。

Java的流,将所有的输入输出的数据都统一成一样的格式,而不必关系数据从什么样的设备来到什么设备区(自我理解)

Java中的流分为两种:
 1)  字节流: 数据流中最小的数据单元是字节
 2)  字符流: 数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节。

如何选择IO流
    1)确定是数据源和数据目的(输入还是输出)
              源:输入流 InputStream Reader
              目的:输出流 OutputStream Writer
    2)明确操作的数据对象是否是纯文本
             是:字符流Reader,Writer
             否:字节流InputStream,OutputStream
    3)明确具体的设备。
              是硬盘文件: File++:
             读取:FileInputStream,, FileReader, 
              写入:FileOutputStream,FileWriter
              是内存用数组
                  byte[]: ByteArrayInputStream, ByteArrayOutputStream
                    是char[]: CharArrayReader, CharArrayWriter
              是String: StringBufferInputStream(已过时,因为其只能用于String的每个字符都是8位的字符串), StringReader, StringWriter
              是网络用Socket流
              是键盘: 用System.in(是一个InputStream对象)读取,用System.out(是一个OutoutStream对象)打印
    3)是否需要转换流
            是,就使用转换流,从Stream转化为Reader,Writer:InputStreamReader,OutputStreamWriter 
    4)是否需要缓冲 提高效率
       是就加上Buffered: BufferedInputStream, BufferedOuputStream, BuffereaReader, BufferedWriter
    5)是否需要格式化输出

例:将一个文本文件中数据存储到另一个文件中。
      1)数据源和数据目的: 读取流,InputStream Reader  输出:OutputStream Writer
      2)是否纯文本: 是!这时就可以选择Reader Writer。
      3)设备: 是硬盘文件。Reader体系中可以操作文件的对象是 FileReader FileWriter。
            FileReader fr = new FileReader("a.txt");  
             FileWriter fw = new FileWriter("b.txt");  
      4)是否需要提高效率: 是,加Buffer
             BufferedReader bfr = new BufferedReader(new FileReader("a.txt");  );  
             BufferedWriter bfw = new BufferedWriter(new FileWriter("b.txt");  );  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值