Java流系列(一):流的分类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/androidzf/article/details/87878865

File:只能对文件本身的信息进行操作,比如:获取文件的大小等,但无法对文件中的内容进行操作.
如果想对文件中的内容进行操作,则必须借助于流的概念.

一、流:一串流动的数据,以先进先出的方式发送信息的通道.

流的分类:
  • 1:按照流的方向(参考点永远是自己的程序)分:
    • 输入流(InputStream):只能向其中读取数据的流.
    • 输出流(OutputStream):只能向其中写出数据的流.

注意:输入流和输出流本身都是抽象类,不能直接实例化,如果想操作对象,则必须实例化这些类的子类对象.

  • 2:按照数据的传输单位分:
    • 字节流:以字节为单位传输数据的流.
    • 字符流:以字符为单位传输的数据的流.
  • 3:按照功能分:
    • 节点(低级)流:直接对目标设备进行操作的流.
    • 处理(高级)流:对节点流进行连接和封装,生成功能更加强大的流。

在java中,最基础的流类有哪些?

  • 字节流:
    InputStream:只能读取字节数据的流.
    OutputStream:只能写出字节数据的流.
  • 字符流:
    Reader:只能读取字符数据的流.
    Writer:只能写出字符数据的流.

二、流的继承结构图:

  • InputStream:只能读取字节数据的流.本身是抽象类不能实例化.
    |--FileInputStream:从文件中读取数据的流类.
    |--FilterInputStream:过滤输入流对象
  		|--BufferedInputStream:带缓冲功能的字节输入流对象
        |--DataInputStream:数据输入流,主要提供了读取java八大基本数据类型及其String数据类型的能力.
    |--ObjectInputStream:读取对象的输入流对象
    |--ByteArrayInputStream:字节数组输入流:读取字节数组中的数据.
  • OutputStream:只能写出字节数据的流.本身是抽象类不能实例化.
    |--FileOutputStream:向文件中写出数据的流.
    |--FilterOutputStream:过滤输出流对象
  		|--BufferedOutputStream:带缓冲功能的字节输出流对象.
   		|--DataOutputStream:数据输出流,主要提供了写出java八大基本数据类型及其String数据类型的能力.
    |--PrintStream:打印流
    |--ObjectOutputStream:写出对象的输出流对象
    |--ByteArrayOutputStream:字节数组输出流:将数据写入到当前类内部封装的数组中.(开发中常用)
  • Reader:只能读取字符数据的流。本身是抽象类不能实例化.
    |--InputStreamReader:转化流,将字节流转化成字符流.可以手工指定编码表.
   		|--FileReader:从文件中读取字符数据的流.使用本地的编码表,当前是中文环境,所以默认的编码表是gbk
    |--BufferedReader:字符缓冲输入流,给读取字符数据提供了缓冲功能,从而增强了读取字符的效率.
    |--StringReader:字符串输入流对象
  • Writer:只能向其中写出字符数据的流.本身是抽象类不能实例化.
    |--OutputStreamWriter:字符流转化成字节流的桥梁.可以手工指定编码表.
   		|--FileWriter:向文件中写出字符数据的流。使用本地的编码表,当前是中文环境,所以默认的编码表是gbk
    |--BuffereWriter:字符缓存输出流,给写出字符数据提供缓冲功能,从而增强写出字符数据的效率.
    |--StringWriter:字符串输出流对象
    |--PrintWriter:打印字符流对象
InputStream常用的方法:
  • inputStream.read():一次从指定输入流中读取一个字节,并返回读到的字节值,如果读到文件的最后则返回-1.

  • public int read(byte[] b):每次从输入流中读取b.length个字节存入到数组b中,如果实际上没有那么多数据了,则读取实际读到的字节存入到缓冲区数组b中,并返回实际读到的字节数.

  • public long skip(long n)throws IOException:从输入流中跳过指定的字节数,n可以为正数,表示向后跳过的字节数.如果为负数,则看向前跳过的字节数是否超过了索引0的位置,如果超过了,则报异常。没有超过可以向前正常跳跃.

猜你喜欢

转载自blog.csdn.net/androidzf/article/details/87878865
今日推荐