自定义字节流缓冲区:
class MyBufferedInputStream{
private InputStream in;
private byte[ ] buf=new byte[1024*4]
privete int pos=0,count=0
MyBufferInputStream(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//每次重新取pos都归零
byte b=buf[pos]
count--;
pos++
return b&255//8进制
}else if(count>0){
byte b=buf[pos]
count--;
pos++
return b&0xff//255的16进制表示形式
}
return -1
}
public void myClose() throws IOException {
in.close();
}
}
//为什么返回类型是int而不是byte?(避免-1的发生)
byte :-1 转成int:-1。Byte可以提升,可以往前补0,而不是补1,就不是-1了
11111111 --提升为一个int型,不还是-1吗?是-1的原因是因为在8个1前面补的是1导致的。那么只只要在前面补0,既可以保留原字节数据不变,又可以避免-1的出现。
怎么补0呢?
11111111 11111111 11111111 11111111
&00000000 00000000 00000000 1111111
---------------------------------------------------------
00000000 00000000 00000000 11111111
read方法在提升,write方法在强转(写出去的还是有效数据)
|