1)FileInputStream和FileOutputStream:
以字节为操作单位的文件输入流和文件输出流。利用这两个类可以对文件进行读写操作。
注意:FileInputStream读取中文会出现乱码,原因是在Unicode编码中,一个英文字符是
用一个字节编码,而一个中文字符则是用两个字节编码,而用字节流读取中文时,是一个一个字节读取,所以会出现编码错误。
注意:FileOutputStream往文件中写入的中文字符没有乱码,原因是程序先把中文字符转成了字节数组,打开文件时文件编辑器(如Windows记事本或其他工具)能自动识别中文字符。
2)FileReader和FileReader:
以字符(2个字节)为操作单位的文件输入流和文件输出流。
使用这两个类可以避免读取中文出现乱码的问题。
2)FileReader和FileWriter:是以字符为操作单位的文件输入流和文件输出流。利用这两个类可以对字符文本文件进行读写操作。
***注意:FileReader读取中文的时候不会出现乱码。
3)BufferedInputStream和BufferedOutputStream:针对字节的缓冲输入流和输出流。利用这个两个类可以提高数据读写的速度。因为他们会创建一个内部缓冲区数组,所有读取或写入的字节,都会先填充这个缓冲区,然后一次性读取或写入都目标数据源中。
4)BufferedReader和BufferedWriter:针对字符的缓冲输入流和输出流。利用这两个类可以提高数据读写的速度。BufferedReader还支持读取整行数据。
***注意:在操作字节文件或字符文件时,建议使用带缓冲给你的输入流和输出流,以提高程序的效率。
5)其他的输入流和输出流
ZipInputStream和ZipOutputStream:实现ZIP压缩文件的读写功能;
RandomAccessFile:实现在文件的任何地方读写数据。
PrintStream和PrintWriter:实现提供一些的print和println方法。
System.ou.println中的System.out就是PrintStream的实例。
DataInputStream和DataOutputStream:实现从文本读取和写入文本的基本类型的数据。
InputStreamReader和OutputStreamWriter:实现字节流和字符流之间的转换。
对象的序列化和反序列化:
JDK提供了两个类(ObjectOutputStream和(ObjectIntputStream),用于存储和读取基本数据类型或对象。它最强大之处就是可以iyo把java中对象写入到数据源中,也能把对象从数据源中还原回来。
用ObjectOutputStream类存储基本类型数据或对象的机制叫做序列化;
用ObjectIntputStream类读取基本类型数据或对象的机制叫反序列化;
特点:
1)能被序列化的对象所对应的类必须实现java.io.Serialozable这个标识性借口(借口中没有抽象方法)。凡是实现借口的类都有一个表示序列化版本标识的静态变量。
private static final long serialVersionUID(用来表明类的不同版本的兼容性可以通过Eclipse自动添加)。
2)在序列化过程中,其所属类的static属性和方法代码不能被序列化处理。
3)对于个别不希望被序列化的非static属性,可以再属性申明时transient关键字进行表明。