当前位置:网站首页>实现图片的复制

实现图片的复制

2020-11-08 21:03:50 8Years

public class TestBytesInputStream {

    public static void main(String[] args) {
        //复制a.jpg图片
        byte[] datas=fileToBytesArray("D:\\a.jpg");
        byteArrayToFile(datas,"D:\\b.jpg");



    }

//1.图片读取到字节数组中
//  1.图片到程序——FileInputStream
//  2.程序到字节数组——byteArrayOutputStream


    public static byte[] fileToBytesArray(String path) {
        //创建源头与目的地
        File src = new File(path);
        byte[] dest = null;
        //选择流
        InputStream is = null;
        ByteArrayOutputStream baos = null;


        try {
             //也可以使用  is = new BufferedInputStream(FileInputStream(src));
            is = new FileInputStream(src);
            //也可以使用baos = new BufferedOutputStream(teArrayOutputStream());
            baos = new ByteArrayOutputStream();
            //3.分段读取
            byte[] flush = new byte[1024 * 10];//缓冲容器
            int len = -1;
            while ((len = is.read(flush)) != -1) {
                baos.write(flush, 0, len);//写到字节数组中
            }
            baos.flush();
            return baos.toByteArray();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != is) {
                    is.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    public static void byteArrayToFile(byte[]src,String path){
        File dest=new File(path);
        InputStream is=null;
        OutputStream os=null;
        try {
            is = new ByteArrayInputStream(src);
            os = new FileOutputStream(dest);
            byte[] flush = new byte[5];
            int len = -1;
            while ((len = is.read(flush)) != -1) {
                os.write(flush, 0, len);
            }

        }catch (IOException e) {
            e.printStackTrace();
        } finally {
            try{
                if(os!=null){
                    os.close();
                }
            }catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

值得提醒的是,当is.read()没有传入参数的时候,复制的图片会无法打开,因为它只能一个字节一个字节地读,所以最好还是传入数组

 

提高性能的两个地方(1.缓冲容器的使用(相当于小卡车)    2.还可以使用字节缓冲流(相当于大卡车))

版权声明
本文为[8Years]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4583813/blog/4708021