A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马—王宁 中级黑马   /  2012-4-19 17:45  /  2081 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

自定义字节缓冲区的原理是什么呢?谁给讲解下。
为什么这么定义呢,为什么是in的read呢?它又读取的是那里的数据呢?

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

字节流缓冲区.jpg

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

3 个回复

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

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