流的分类
按数据处理类型分 : 字节流,字符流
按数据流向分 : 输入流,输出流
共同点:都是抽象类,必须依赖子类去实现;
字节流:读到一个字节返回一个字节,所以可以处理所有类型的数据,eg:图片,MP3,视频文件,并且不会乱码;
1.InputStream,字节输入流(byte);
2.OutputStream,字节输出流(byte);
字符流:使用字节流读到一个或多个字节(中文,流默认是GBK编码,是俩位,文件默认是UTF-8编码,是3位)–>>这就是乱码的原因.先去查指定的编码表,查到后返回该字符;
3.Reader,字符输入流,子类必须实现的方法write(),flush(),close();
4.Writer,字符输出流,子类必须实现的方法read(),close();
必须关流,close(),如果不关流,东西只会写入缓存区,而不会写入磁盘,导致程序运行后,文件里没有任何内容(不信赌个棒棒糖:-D);
IO体系结构图
乱码问题
1.字符流才乱码;
2.字节流操作:读到一个字节返回一个字节,所以不会乱码;
3.字符流操作:使用字节流读到一个或多个字节(中文,流默认是GBK编码,是俩位,文件默认是UTF-8编码,是3位)–>>这就是乱码的原因.先去查指定的编码表,查到后返回该字符;
4.解决方案:指定编码解码过程使用的码表,默认是GBK,只有下面俩个可以指定编码,其他都选用默认编码GBK;
InputStreamWriter(InputStream,String charSet);
OutputStreamwriter(OutputStream,String charSet);