一、如下分类

 二、字节流

   

 

字节流读数据

 

如下是一个文件复制代码,之所以如下write方法要加长度,一是因为read方法不是覆盖去读,

 

如下是缓冲流说明,缓冲流中数组是在内存中的,肯定比字节流直接写到硬盘要快啊。

 

三、字符流

如下是相关编码解码常识

 

如下是java中编码和解码的一些用法

因为字节流读取中文会出现乱码问题(根本原因是编码和解码方法不一致),但是字符流本来就一个个字符的操作,也减少了乱码问题,所以总结如下

   

 在如上字符流总结中可以看出,字符流有flush方法,但是前面的字节流没有,字符流如果不执行刷新流,是不像字节流那样直接写进硬盘的。

 

 

四、转换流(代码中如下两个类是FileWriter和FileReader的父类)

转换流如下,并且可以指定编码,防止乱码,但是jdk11之后FileReader的构造函数也可以指定编码,此时就不用单独用转换流了。

InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("demo1\\hhh.txt"),"GB18030");
int read = inputStreamReader.read(); //这样指定编码就不是FileInputStream的read方法返回一个字节了,而是转换流InputStreamReader的read方法,是返回一个字符,这也照应了上面说明是字节到字符的
转换流
System.out.println((char)read);

 五、如下是对象操作流(ObjectOutputStream和ObjectInputStream)

 

 

六、如下是Properties中与流相关的操作,properties继承map,所以有map的许多方法

样例使用如下