- /*
- 11111111 -->提升了一个int类型,那不还是-1,吗?是-1的原因是因为在8个1的前面补得的是1导致的
- 那么我只要在前面补0,既可以保留原字节数据不变,又可以避免-1的出现,那么怎,补0呢
-
- 11111111 11111111 11111111 11111111
- &00000000 00000000 00000000 11111111
- -------------------------------------
- 00000000 00000000 00000000 11111111
-
- 这样就可以避免-1的发生
-
- read方法在提升,write方法将指定的字节写入此缓冲的输出流(强制转换,取最低的8位)
- */
- import java.io.*;
- class MyBufferedInputStream{
- private InputStream in;
-
- private byte[] buf=new byte[1024*4];
-
- private int pos=0;
-
- private int 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;
- //取数组第一个元素pos=0;
- byte b=buf[pos];
-
- count--;
- pos++;
- //b与255进行与操作,用十六进制表示就是0xff
- return b&255;
- }else if(count>0)
- {
- byte b=buf[pos];
-
- count--;
- pos++;
- //b与255进行与操作,用十六进制表示就是0xff
- return b&255;
- }
-
- return -1;
- }
- public void myClose()throws IOException
- {
- in.close();
- }
-
- }
复制代码 图片属于二进制数据,不属于字符流,
因为图片转化成二进制数据读入的时候发生了错误,
好像是图片数据转化成11111111时,当读到-1时停止,
所以拷贝文件会发生错误,
你可以参考上面的代码,毕老师讲过的,仔细看一下 |