在Java IO中流既可以是字节流(以字节为单位进行读写),也可以是字符流(以字符为单位进行读写)。
一。
1.字节流处理的单元是一个字节,用于操作二进制文件(计算机中所有文件都是二进制文件)。分输入流:java.io.InputStream和输出流:java.io.OutputStream
2.字符流就是:字节流 + 编码表。字符流的抽象基类:Reader , Writer。
3.缓冲流:可以通过减少读写次数来提高输入和输出的速度。它们内部有一个缓冲区,用来提高处理效率。其内部也是封装了字节/字符数组,可以指定缓冲区的大小。没有指定缓冲区大小,默认的字节是8192。。首先缓冲区输入流会将读取到的数据读入缓冲区,当缓冲区满时,或者调用flush方法,缓冲输出流会将数据写出。
4.序列流:对多个流进行合并。SequenceInputStream 表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。构造函数有SequenceInputStream(InputStream s1, InputStream s2) 和SequenceInputStream(Enumeration<? extends InputStream> e)
5. 对象的序列化是将内存中的对象直接写入到文件设备中。对象的反序列化: 将文件设备中持久化的数据转换为内存对象。
基本的序列化由两个方法产生:一个方法用于序列化对象并将它们写入一个流,另一个方法用于读取流并反序列化对象。ObjectInputStream、ObjectOutputStream
6.可以和流相关联的集合对象是Properties。Properties(继承Hashtable):该集合不需要泛型,因为该集合中的键值对都是String类型。Properties只加载key=value这样的键值对,与文件名无关,注释使用#。
7.打印流。PrintStream是一个字节打印流,System.out对应的类型就是PrintStream。PrintWriter是一个字符打印流。
8.操作数组的流对象。操作字节数组的是ByteArrayInputStream以及ByteArrayOutputStream。操作字符数组的是CharArrayReader和CharArrayWriter。
9.操作基本数据类型的流对象。DataInputStream 从数据流读取字节,并将它们转换为正确的基本数据类型值或字符串。对应的写的就是DataOutputStream 将基本类型的值或字符串转换为字节,并且将字节输出到数据流。
二。File类
File类关心的是在磁盘上文件的存储。
File类描述的是一个文件或文件夹。(文件夹也可以称为目录)
文件包含很多的信息:如文件名、创建修改时间、大小、可读可写属性等。
三。java IO用途:
- 文件访问
- 网络访问
- 内存缓存访问
- 线程内部通信(管道)
- 缓冲
- 过滤
- 解析
- 读写文本 (Readers / Writers)
- 读写基本类型数据 (long, int etc.)
- 读写对象