理解含义更好,不理解就记住背过。
什么是字节流和字符流?
IO流分为字节流和字符流;顾名思义就能知道是因为其中数据格式区分的,字节流中数据格式为字节,字符流中数据格式为字符。
记住只要处理的是文本文档就用字符流;例如excel、word、txt等;其他的例如pdf、图片等各种包就用字节流。
io流家族
一看上图就就头皮发麻,太多了。感觉麻烦的可以看看【】【】理解下io流的概念,这里就是简单的列几个比较简单的说常用类的应用。
java是面向对象的,也就是研究的时候看IO流功能中有哪些类,这些类都是干什么的?什么时候用就可以了?就算有一百个类肯定这些类都有不同的作用(看似废话),看他们都有什么属性?都有哪些方法?开始不要想着多个类的交互,单纯的研究某个或者某家族的类。例如我们常用的String,工作中我们要处理字符串就会时用String类的对象,String类能存放我们的字符串,能剪切、对比、替换我们的字符串。同理,我们也如此的去研究IO流,工作中遇到读取文件,就要想到用IO流的类,那个类呢?
每个类的应用场景
字节流和字符流如何选择?
上面说了,只要处理的不是文本文件都用字节流,文本文件就要字符流。原因:字符流处理文档会更快,字节流处理文本文件是要先转字符后操作,多了一步。因为计算机数据都是字节的,所以字节流能处理任何文件。Reader、Writer字符类是父类,InputStream、OutputStream是字节流父类,他们是抽象类。
什么时候选FileInputStream和FileOutputStream?
只要处理磁盘上的文件都可以用,我想读磁盘上的东西就用FileInputStream,想输出数据到磁盘中就用FileOutputStream。对IO流还不熟的时候用这两这类没毛病,项目绝对能运行,企业级项目也不会涉及到多少人要什么高性能。但是这两个类比较基础,可以用装饰器的模式增加一些用途和有点,下面说。
什么时候用FileReader和FileWriter
只要处理磁盘上的文件,而且这个文件是文本,就选择用着两个(注意字符集)。原因:文本文件就用字符流,但是字符集分为GBK、UTF-8、ASCII等,所以根据utf-8格式的文件建立的流,输出到其他格式肯定是乱码的。这个就要用到InputStreamReader和OutputStreamWriter
什么时候用InputStreamReader和OutputStreamWriter
只要某个字节流处理的是文本文件,无论是想用利用下字符流提高高效,还是想转换字符集都可以用着两个类。1、提高效率的原因是自己操作文本文件需要先转字符,提前用字符流会快。2、字符集转换,例如我们输入的时候是gbk格式,输出想要utf格式,就可以用这两个类。
什么时候用BufferedInputStream和BufferedOutputStream,BufferedReader和BufferedWriter
想高效就用这四个类,大于几十兆的文件最好用这几个类。
其他
还有其他的类,以后再补充