黑马程序员_JAVA IO 流 基本概述

来源:互联网 发布:淘宝账号怎么转化卖家 编辑:程序博客网 时间:2024/05/22 17:01
  在java中有个比较重要的技术部分就是IO流技术。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。IO是input和output的简写,是用来处理设备之间的数据传输。java对数据的操作是通过流的方式,流按照操作数据的不同分为:字节流和字符流。字节流的抽象基类InputStream,OutputStream字符流的抽象基类:Reader,Writer。java中I流类图结构如下:




字节流和字符流的区别:
字符流,因为文件编码的不同,就有了对字符进行高效操作的字符流对象,它的原理就是基于字节流读取字节时去查了指定的码表。它和字节流的区别有两点:1.在读取数据的时候,字节流读到一个字节就返回一个字节,字符流使用了字节流读到一个或多个字节(一个中文对应的字节数是两个,在UTF-8码表中是3个字节)时,先去查指定的编码表,再将查到的字符返回;2.字节流可以处理所有类型的数据,如jpg、avi、mp3、wav等等,而字符流只能处理字符数据。所以可以根据处理的文件不同考虑使用字节流还是字符流,如果是纯文本数据可以优先考虑字符流,否则使用字节流
  其中InputStream和OutputStream在使用的时候主要是看数据时流向内存还是从内存流出,如果数据流向内存则是使用IntputStream,如果数据是从内存流出则是使用OutputStream。
 InputStream的基本方法
    int read() throws IOException 读取一个字节以整数形式返回,如果返回-1已到输入流的末尾
    void close() throws IOException 关闭流释放内存资源
    long skip(long n) throws IOException 跳过n个字节不读
    ......
  OutputStream的基本方法
    void write(int b) throws IOException 向输出流写入一个字节数据
    void flush() throws IOException 将输出流中缓冲的数据全部写出到目的地
    ......
  Writer的基本方法
    void write(int c) throws IOException 向输出流写入一个字符数据
    void write(String str) throws IOException 将一个字符串中的字符写入到输出流
    void write(String str,int offset,int length) 将一个字符串从offset开始的length个字符写入到输出流
    void flush() throws IOException 将输出流中缓冲的数据全部写出到目的地
    ......
  Reader的基本方法
    int read() throws IOException 读取一个字符以整数形式返回,如果返回-1已到输入流的末尾
    ......
  为了提高读写效率,引入了缓冲技术。


字符流的缓冲区:
缓冲区的出现提高了对流的操作效率。
原理:其实就是将数组进行封装。对应的对象:BufferedWriter 特有方法newLine(),跨平台的换行符。而BufferedReader特有方法readLine(),一次读一行,到行标记时,将行标记之前的字符数据作为字符串返回,读到末尾返回null。
  在使用缓冲区对象时,要明确,缓冲的存在是为了增强流的功能而存在,所以在建立缓冲区对象时,要先有流对象存在。其实缓冲区内部就是在使用流对象的方法,只不过加入了数组对数据进行了临时存储,为了提高操作数据的效率。
  因为字符流是建立在字节流基础上的,字符流是在在节奏的基础上对照相应的码表而产生因此字节流和字符流之间春在这转换关系。InputStreamReader需要和InputStream套接 OutputStreamWriter需要和OutputStream套接
  例:OutputStreamWriter osw = new OutputStreamWriter (new FileOutputStream(文件路径);
  当转换时需要用到缓冲技术时的示例:
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in))
BufferedWriter bufw = new BufferedWriter( new OutputStreamWriter(System.out) )
  在java中比较重要和特殊的对象File类,因为流是用来操作数据的,数据最明显的体现形式就是文件,文件包含了许多的行为和属性信息,比如:文件的路径,文件的大小,文件的扩展名等。File类可以方便的对文件或者文件夹的属性信息进行操作。File类的出现弥补了流的不足,流只能操作数据,而File对象可以作为参数传递给流的构造函数。
0 0