- 二者所作用的对象不同
- 计量单位不同
stream是面向byte的, reader/writer是面向char的
1. Java中byte和char的区别
| 方面 | byte |
char |
|---|---|---|
| 大小 (bit) | 8 | 16 |
| 是否有符号 | 有 (第一个bit为符号位) | 无 |
| 取值范围 | [-128, 127] | [0, 65535] |
| 编码形式 | 无 | utf-16 |
2. 二者在api上的不同
InputStream |
Reader |
|---|---|
read(byte[] b, int off, int len) |
read(char[] cbuf, int off, int len) |
3. 二者之间的转换
InputStream -> Reader: InputStreamReader
InputStreamReader 中使用 StreamDecoder 这样一个Reader来实现byte到char的转换
Reader -> InputStream: Reader -> String -> ByteArrayInputStream/String#charAt
4. Reader/Writer的优化
BufferedReader, BufferedWriter 二者里面会自己维护一个 char cb[] 来缓存读到的数据
不用自己在外面维护一个数组
ref:









网友评论