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 不同于其他文件读写流,这个可以在文件的任何一个位置进行读或者写。这是多线程下载的好办法。