IO流——自定义字节流的缓冲区
来源:互联网 发布:淘宝商家被骗了怎么办 编辑:程序博客网 时间:2024/05/22 17:30
import java.io.*;class MyBufferedInputStream{private InputStream in;private byte[] buf = new byte[1024*4];private int pos = 0,count = 0;MyBufferedInputStream(InputStream in){this.in = in;}//一次读一个字节,从缓冲区(字节数组)获取。public int myRead()throws IOException{//通过in对象读取硬盘上数据,并存储buf中。if(count==0){count = in.read(buf);if(count<0)return -1;pos = 0;byte b = buf[pos];count--;pos++;return b&255;}else if(count>0){byte b = buf[pos];count--;pos++;return b&0xff;}return -1;}public void myClose()throws IOException{in.close();}}/*11111111-111111110000000000101001001010100101010010101001010byte: -1 ---> int : -1;00000000 00000000 00000000 11111111 25511111111 11111111 11111111 1111111111111111 -->提升了一个int类型 那不还是-1吗?是-1的原因是因为在8个1前面补的是1导致的。那么我只要在前面补0,即可以保留原字节数据不变,又可以避免-1的出现。怎么补0呢? 11111111 11111111 11111111 11111111 &00000000 00000000 00000000 11111111 ------------------------------------ 00000000 00000000 00000000 11111111 0000-00011111-11100000000011111-1111 -1结论:字节流的读一个字节的read方法为什么返回值类型不是byte,而是int。因为有可能会读到连续8个二进制1的情况,8个二进制1对应的十进制是-1.那么就会数据还没有读完,就结束的情况。因为我们判断读取结束是通过结尾标记-1来确定的。所以,为了避免这种情况将读到的字节进行int类型的提升。并在保留原字节数据的情况前面了补了24个0,变成了int类型的数值。而在写入数据时,只写该int类型数据的最低8位。*/
阅读全文
0 0
- IO流——自定义字节流的缓冲区
- IO流自定义字节流的缓冲区
- 自定义字节流缓冲区
- Java自定义字节流的缓冲区
- 自定义字节流缓冲区,演示缓冲区的工作原理
- 黑马程序员—字节流、自定义缓冲区、异常信息处理
- IO流(字节流的缓冲区)-示例拷贝mp3
- JAVA IO使用高速缓冲区的字节流复制文件
- IO流--字节流缓冲区(BufferedOutputStream,BufferedInputStream)
- 黑马程序员_自定义字节流的缓冲区
- 自定义字节流缓冲区read(),write()的特点
- IO技术(二)字节流、字节流缓冲区
- 黑马程序员——JAVA基础之IO流缓冲区,转换流,字节流
- 黑马程序员——Java基础------IO流之字符流、字节流和缓冲区。
- 黑马程序员——IO(缓冲区、字节流、转换流、流操作规律)
- Java IO流系列(四)—— 从字节流及其缓冲区到转换流
- Java面向对象——IO流(字节流缓冲区)
- 黑马程序员 Java面向对象——IO流(字节流缓冲区)
- java 单例模式
- backup
- 对象转化为json
- Android Timer 定时器 与handler的配合
- 正则表达式
- IO流——自定义字节流的缓冲区
- UE4 天空盒制作
- 最长上升子序列 最长公共子序列
- 剑指offer-丑数
- tcpdump
- Java四大特征(抽象、封装、继承、多态)
- 安卓实现按返回键回到桌面以及再一次按返回键退出应用
- 高数基础4-导数与微分
- 深刻理解引用、const引用、右值引用的本质