本帖最后由 ぺsimon☆ 于 2013-5-1 19:11 编辑
- <div class="blockcode"><blockquote>
- /*
- 这是自己做的字节流缓冲区read方法
- */
- import java.io.*;
- class MyBufferedInputStream //extends InputStream
- {
- private InputStream fis;
- byte[] b=new byte[1024]; //定义一个byte类型的数组
- int pos=0;
- int count=0;
- MyBufferedInputStream(InputStream fis)//构造函数初始化
- {
- this.fis=fis;
- }
- public int myRead()throws IOException//创建一个缓冲区读字符的方法
- {
- if(count==0)
- {
- //利用FileInputStream的read方法,从硬盘读一批数据存到数组里
- count=fis.read(b);
-
- if(count==-1)
- return -1;
- pos=0; //从硬盘读一批数据存到数组,让pos归零
- byte b1=b[pos];
- pos++;
- count--;
- return b1&255;
- }
- else if(count>0)
- {
- //byte b1=b[pos];
- pos++;
- count--;
- /*
- *****
- 问题:为什么这里写return b[pos]&255;会报角标越界异常?谢谢
- ******
- */
- return b[pos]&255;
- }
- return -1;
- }
- public void myClose()throws IOException //创造关闭资源的方法
- {
- fis.close();
- }
-
- }
- class MyBufferedDemo
- {
- public static void main(String[] args)throws IOException
- {
- //定义一个读取字节的输入流对象文件
- FileInputStream fis=new FileInputStream("1.jpg");
- //定义一个输出字节的流对象文件
- FileOutputStream fos=new FileOutputStream("3.jpg");
- //创建一个自定义的缓冲区对象
- MyBufferedInputStream mbf=new MyBufferedInputStream(fis);
-
- int num=0;
- while((num=mbf.myRead())!=-1)
- {
- fos.write(num);
- }
- mbf.myClose();
- fos.close();
-
- }
- }
复制代码 |