Java I/O流的字节理解

InputStream 和 OutputStream的继承只能支持8位的字节流 这个8位的字节流怎么去理解? 是说一次只能读取或者写入8个字节码?

java的字节流在读取的时候,是以一个字节8byte为单位读取数据;而字符流则是以一个字符为单位读取数据;需要说明的是java中,字符被加载时自动转化为unicode编码,而unicode长度为两个字节为一个字符。即,读取是默认数据单位的不同,字节流为一个字节,字符流为一个字符(unicode两个字节)。
在处理非字符数据时一般使用字节流,而处理字符数据时使用字符流,如OS X上为GB2312编码的汉字符号等,在处理时需要转换为unicode,并且每次以2字节为一个字符单位读取,这样才不会出现数据乱码或失真。希望能帮到你。

当然不是,而是最小的读取单位是一个字节。

那InputStream 是支持8位字节流 而Reader是支持16位字节流 这两者有什么区别呢

1个字符 = 8个字节
字节流是读入或者写入的时候,是一个字节一个字节的读或写。
字符流是读入或写入的时候,是一个字符一个字符的读或写。

所有数据都是bit(位)流。
比如bit流:"01000001010000100100001101000100"
按8位的字节流读取就是:"01000001", "01000010", "01000011", "01000100" 就是4个字符 0x41, 0x42, 0x43, 0x44, “ABCD”
按16位的字节流读取就是两个UNICODE字符:"0100000101000010", "0100001101000100",即 0x4142, 0x4344,这是两个什么字符就要查UNICODE码表了。

内存中一个字节就是8位,应该是程序操作的最小单位。