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-111111110000000000101001001010100101010010101001010
byte: -1 ---> int : -1;
00000000 00000000 00000000 11111111 255
11111111 11111111 11111111 11111111
11111111 -->提升了一個int類型 那不還是-1嗎?是-1的原因是因為在8個1前面補的是1導緻的。
那麼我隻要在前面補0,即可以保留原位元組資料不變,又可以避免-1的出現。
怎麼補0呢?
11111111 11111111 11111111 11111111
&00000000 00000000 00000000 11111111
------------------------------------
00000000 00000000 00000000 11111111
0000-0001
1111-1110
000000001
1111-1111 -1
結論:
位元組流的讀一個位元組的read方法為什麼傳回值類型不是byte,而是int。
因為有可能會讀到連續8個二進制1的情況,8個二進制1對應的十進制是-1.
那麼就會資料還沒有讀完,就結束的情況。因為我們判斷讀取結束是通過結尾标記-1來确定的。
是以,為了避免這種情況将讀到的位元組進行int類型的提升。
并在保留原位元組資料的情況前面了補了24個0,變成了int類型的數值。
而在寫入資料時,隻寫該int類型資料的最低8位。
*/