1、流的本质,数据传输
    2、javaIO流分字符流和字节流或者是,输入流和输出流。

    何为字符流和字节流?
    最基本的流就是字节流,那为什么还有字符流,因为数据编码的不同,字符流就是最专门用来读字符的流,本质还是字节流,只是读取字节的时候查了不同指定的码表,因此可能会依次读取好几个字节才算是读取了一个字符。
    区别有两:
    1、读取单位:字节流就读取一个字节,字符流呢,想上面说的,可能会读取多个,视码表而不同。
    2:读取对象:字节是最基本的流,所有数据都可以读取,字符流是专门为读取字符设计的流,只能读取字符。因此读字符首选字符流。使用字符流时注意编码问题。

    如何理清字符流和字节流?

    字符流:
    1、字符输入流:Reader是所有输入字符流父类,是抽象类。
    CharReader,StringReader,两种基本介质流。
    PipedReader从与其他线程共用的管道中读取数据。
    BufferReader,一个装饰器,这类输入流都具备缓冲功能。
    FilterReader
    InputStreamReader,转换流,读取字节流转换成字符流
    2、字符输出流:Writer所有输出字符流父类,是抽象类。
    CharArrayWriter,StringWriter两种基本介质流。
    PipedWriter同上。
    BufferedWriter同上原理。
    PrintWriter和PrintStream极其类似。
    OutputStreamWriter是将字节输出流转换成字符输出流
    字节流:
    1、字节输入流:InputStream是所有输入字节流的父类,抽象类。
    ByteArrayInputStream,StringBufferInputStream,FileInputStream三种基本的介质流。
    分别从字节数组,字符串,和本地文件中读取。
    PipeInputStream,同上原理
    ObjectInputStream和所有FilterInputStream的子类。都是装饰流
    2、字节输出流:OutputStream,所有这方面流的父类,抽象类。
    ByteArrayOutputStream,FileOutputStream
    PipedOutputStream
    ObjectOutputStream和所有FilterOutputStream的子类都是装饰流。
    转换流:
    1、InputStreamReader:字节到字符的桥梁
    2、OutputStreamWriter:字符到字节的桥梁。

    何为RandomAccessFile?
    并不是流体系一员,封装了字节流和一个缓冲区(字符数组),内部指针操作数组数据

    使用:
    1 只能操作文件
    2 不同于其他文件读写流,这个可以在文件的任何一个位置进行读或者写。这是多线程下载的好办法。