黑马程序员技术交流社区

标题: 想请教下 [打印本页]

作者: 黑马—王宁    时间: 2012-4-19 17:45
标题: 想请教下
自定义字节缓冲区的原理是什么呢?谁给讲解下。
为什么这么定义呢,为什么是in的read呢?它又读取的是那里的数据呢?

字节流缓冲区.jpg (18.17 KB, 下载次数: 29)

字节流缓冲区.jpg

作者: liqian    时间: 2012-4-19 18:03
这个应该是利用BufferedInputStream类中read()方法的工作原理
1.先一个一个从字节流中读取字节,读取一定量(自定义)之后,存储在一个字节数组(缓冲区)并获得存储数量(read方法的返回值).
2.然后一个一个字节返回,返回一个,存储数量减1,然后指针往后移一位,准备取下一个.
3.如果存储数量为0 ,代表当前数组中所有数据已经全部取完,此时再来一次读取(read(byte[] b)),再获得此次存储数量。
4.in.read读取的是一个字节,或者字节数组.读取的是字节流.
作者: τ、高童鞋ゝ    时间: 2012-4-19 18:09
字节流的读一个字节的read方法为什么返回值类型不是byte,而是int。
因为有可能会读到连续8个二进制1的情况,8个二进制1对应的十进制是-1.
那么就会数据还没有读完,就结束的情况。因为我们判断读取结束是通过结尾标记-1来确定的。
所以,为了避免这种情况将读到的字节进行int类型的提升。
并在保留原字节数据的情况前面了补了24个0,变成了int类型的数值。

作者: 张超超    时间: 2012-4-20 09:37
IO流自定义字节流的缓冲区:

思路:BufferedInputStream类中read()方法的工作原理
1)先一个一个从字节流中读取字节,读取一定量(自定义)之后,存储在一个字节数组(缓冲区)(FileInputStream.read(byte[] b)),并获得存储数量(read方法的返回值)。
2)一个一个字节返回,返回一个,存储数量减1,然后指针往后移一位,准备取下一个。
3)如果存储数量为0 ,代表当前数组中所有数据已经全部取完,此时再来一次读取(read(byte[] b)),再获得此次存储数量。
4)如果存储数量(即read方法返回-1),代表读到文件末尾,返回-1。
因此,需要用到以下几个变量:
读取的字节数量,指向数组中准备取哪一个的指针,将要返回的字节变量。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2