本帖最后由 衣带赞 于 2013-11-28 00:32 编辑
看了好久,终于发现你的2处错误,第一是没刷新,第二是返回有问题。给你在代码中作了注释,你看看就懂了。- import java.io.*;
- class Huanchongqu
- {
- public static void main(String[] args) throws Exception
- {
- MyBufferedInputStream bi=new MyBufferedInputStream(new FileInputStream("ga.jpg"));
- BufferedOutputStream in=new BufferedOutputStream(new FileOutputStream("ha.jpg"));
- int num=0;
- while((num=bi.myread())!=-1)
- {
- in.write(num);
- in.flush(); /*没刷新,找了好久,经过测试发现这个系统自定义的字节数组大小是64k,
- 和udp协议传输的最大包一样大,你传个小于64k的图片就不会丢失数据。
- 所以当超过64k后会继续往里面添加内容,就会覆盖前面的一些数据。
- 据我估计,当覆盖的数据超过一定大小,会自动刷新一次,所以每次复制都会变少。*/
- }
- in.close(); //最好关流,习惯成自然
- }
- }
- class MyBufferedInputStream
- {
- private FileInputStream in;
- MyBufferedInputStream(FileInputStream in)
- {
- this.in=in;
- }
- byte[] arr=new byte[1024];
- int pos=0;
- int count=0;
- public int myread()throws Exception
- {
- if(count==0)
- {
- pos=0;
- count=in.read(arr);
- if(count==-1) //这里少了两局话,当没有数据后count=-1,
- //然后count-- return -2 & 255 , 多出了一个字节
- return -1;
- count--;
- return arr[0]&255;// 此处是强转,将byte型转换为int型,在将
- }
- if(count>0)
- {
- pos++;
- count--;
- return arr[pos]&255;
- }
- return -1;
- }
- }
复制代码
|