字节流与字符流的一些个人看法
一、字节与字符
IO操作,首先要提到字节与字符、字符串。
名称 | 数据类型 | 含义 |
字节 | byte | 是硬盘中文件存储的单位,也是网络传输信息的单位。 |
字符 | char | 我们常用的字母、数字、字和符号。 |
字符串 | String | 字符的集合,char[]的封装类型 |
笼统来讲,字节用来与文件打交道,而字符用来和人打交道
二、字节流与字符流
流,我的理解流就是用来传输水的水管,数据则是水管里面的水。
流有很多种分类方式,在这里只讨论按数据类型的分类,即字节流(OutputStream、InputStream)与字符流(Reader、Writer)。
字面意义来讲,字节流用来传输字节,字符流用来传输字符。
往往字节流和字符流是同时存在的,例如:我们在java中会看到FileOutputStream和FileWriter
两者实现的功能相同,都是向文件中写入数据,那么它们同时存在的意义是什么?
字节流,用于文件等纯数据打交道,比如保存一张图片(难不成你还指望用字符流来读懂图片的含义,骚年)
字符流,多用于文本打交道,比如保存一段话(字节流也可实现该功能,但字符流更方便)
下面表格是两者的区别与联系
字节流 | 字符流 | |
缓冲区 | 无缓冲区,直接作用于文件 | 有缓冲区,作用于缓冲区 |
处理数据 | byte | char |
Java中对应的类 | InputStream、OutputStream | Reader、Writer |
桥梁 | InputStreamReader 是字节流通向字符流的桥梁 OutputStreamWriter是字符流通向字节流的桥梁 |
注:这些仅仅是我个人看法,是对是错并不一定,因为IO这块,我接触的并不多
就比如下图,我就非常不能理解这种做法,犹如脱裤子放屁
在我看来,这里应直接用FileWriter,而不是FileOutputStream
就算用FileOutputStream,也没必要用OutputStreamWriter,直接line.getBytes()然后用FileOutputStream写入就得了
更不用提PrintWriter了....