IT虾米网

Java如何实现图片的复制

langtianya 2023年01月30日 编程语言 22 0
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.还可以使用字节缓冲流(相当于大卡车))


本文参考链接:https://www.yisu.com/zixun/541281.html
评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Java装饰器怎么写