Java流
文件通常是由一连串的字节或字符构成,组成文件的字节序列称为字节流,组成文件的字符
序列称为字符流。Java 中根据流的方向可以分为输入流和输出流。输入流是将文件或其它输入
设备的数据加载到内存的过程;输出流恰恰相反,是将内存中的数据保存到文件或其他输出设
备。即输入到内存的为输入流,从内存输出的输出流。
输入输出流分为字节流和字符流
InputStream(字节输入流)
InputStream 是字节输入流,InputStream 是一个抽象类,所有继承了 InputStream 的类都是 字节输入流,
主要方法
OutputStream(字节输出流)
所有继承了 OutputStream 都是字节输出流
主要方法
Reader(字符输入流)
Writer(字符输出流)
文件流
FileInputStream(文件字节输入流)
FileInputStream主要按照字节方式读取文件
这样读取文件获取的结果可能是乱码,因为该流是按一个字节一个字节读取的,而汉字是两个字节,所以读书打印出来的结果是乱码的。
FileOutputStream(文件字节输出流)
FileOutputStream 主要按照字节方式写文件。例如做文件的复制。
FileReader(文件字符输入流)
FileReader 是一字符为单位读取文件,也就是一次读取两个字节,而一个汉字刚好两个字节,所以用文件字符流读取文件不会是中文乱码。
FileWriter(文件字符输出流)
FileWriter主要按照一个字符,即两个字节来写文件。
缓冲流
缓冲流主要是为了提高效率而存在的,减少物理读取次数,缓冲流主要有:BufferedInputStream、
BufferedOutputStream、BufferedReader、BufferedWriter,并且 BufferedReader 提供了实用方法
readLine(),可以直接读取一行,BufferWriter 提供了 newLine()可以写换行符。
转换流
InputStreamReader
InputStreamReader 主要是将字节流输入流转换成字符输入流
OutputStreamWriter
OutputStreamWriter 主要是将字节流输出流转换成字符输出流
打印流
打印流主要包含两个:PrintStream 和 PrintWriter,分别对应字节流和字符流
PrintStream
System.out 其实out是PrintSteam类的对象,或者说属性,不是System类的,只是由System类来调用,而PrintSteam类中有println()方法
所以System.out.println,是PrintSteam类的out对象调用了println()方法———System.out 其实对应的就是 PrintStream,默认输出到控制台,我们可以通过setOut(PrintSteam out);方法来我们可以重定向它的输出,可以定向到文件,
System类中有个方法:setOut(PrintSteam out); 重定向输出方法
PrintSteam类:PrintSteam(OutputSteam out); 打印流,里面传的对象是输出流对象。
对象流
对象流可以将 Java 对象转换成二进制写入磁盘,这个过程通常叫做序列化(输出流),并且还可以从
磁盘读出完整的 Java 对象,而这个过程叫做反序列化(输入流)。
序列化 ObjectOutputStream
如果实现序列化该类必须实现序列化接口 java.io.Serializable,该接口没有任何方法,该接口只是一种标记接口,标记这个类是可以序列化的
要序列化的类实现接口Serializable,序列化对象调用 .writeObject(对象);方法来实现写出
transient 关键字
对于要序列化的类,如果其中的某个属性采用了transient关键字修饰的话,序列化时就会忽略它。
序列化号/类版本号 serialVersionUID 属性
进行序列化存储时,会为类生成一个序列化号,生成之后,一旦后期再修改该序列化类,就会重新生成新的序列化号,这样会导致系统认为是两个不同的类,从而出现编译运行有误,所以最好是在一开始的时候自己加入一个固定的序列化号:static final long serialVersionUID = 序列化号;
注:Java中区分类的方式:类名不同则为不同类;类名相同则通过序列化号来查找。
反序列化 ObjectInputStream
要实现反序列化的类同样需要实现接口Serializable,反序列化的对象调用 .readObject(对象);方法来实现读入。
Flies类
是File类,而不是一个文件流,该类提供了大量的文件操作的方法。如删除文件,修改文件,得到文件修改日期,建立目录、列表文件等。具体的方法可以参考jdk帮助文档。