流根据不同的概念可以分多种:
1:流的方向可以分为输入流和输出流
程序---------->文件(这样的流叫输出流)
文件---------->程序(这样的流叫输入流)
2:每次处理字节的长度分为字节流和字符流
字节流每次处理一个bytes
字符流每次处理一个字符(char)也就是两个bytes
3::根据功能可以分为节点流和处理流
节点流直接连接数据源,读入或者读出数据
由于节点流处理能力有限。处理流可以套在节点流上面增强处理功能
输入流:InputStream(基本字节流) FileInputStream(专门处理文件的字节流),
输出流:OutputStream(基本字节流);FileOutputStream(专门处理文件的字节流);
字符流:Reader(基本字符流),Writer(基本字符流);
1:对文件进行处理 FileInputStream FileOutputStream FileReader FileWriter
2:对管道进行操作:PipedInputStream(字节输入流),PipedOutStream(字节输出流),PipedReader(字符输入流),PipedWriter(字符输出流)
PipedInputStream的一个实例要和PipedOutputStream的一个实例共同使用,共同完成管道的读取写入操作。主要用于线程操作。
3:Buffered缓冲流:BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter,是带缓冲区的处理流,缓冲区的作用的主要目的是:避免每次和硬 盘打交道,提高数据访问的效率。
4:转化流:InputStreamReader/OutputStreamWriter,把字节转化成字符。
5; 数据流:DataInputStream,DataOutputStream
数据流可以一次性输出或者输入整个数据避免了多次与硬盘打交道。提高了读写的效率,比如一次性读取一个8字节的Long类型数据或者一个4字节的Float类型等基本数据类型用数据流合适。
6:打印流:printStream,printWriter,一般是打印到控制台,可以进行控制打印的地方
7:对象流:ObjectInputStream,ObjectOutputStream,把封装的对象直接输出,而不是一个个在转换成字符串再输出。
8:序列化流:序列化流:SequenceInputStream。 对象序列化:把对象直接转换成二进制,写入介质中。
使用对象流需要实现Serializable接口,否则会报错。而若用transient关键字修饰成员变量,不写入该成员变量,若是引用类型的成员变量为null,值类型的成员变量为0.