размер копии отличается с помощью java IO - PullRequest
0 голосов
/ 10 февраля 2020

Я использую java IO для копирования изображения, но получаю другой размер. исходное изображение " eye.jpg " - 225995 КБ, копия " eyecopy2.jpg " - 226304. И я программирую, чтобы получить размер eye.jpg , это 226304кб. Я открываю копию, это правильно. Интересно, если это нормально?

byte[] data=null;
    try {
        InputStream is = new FileInputStream("eye.jpg");
        ByteArrayOutputStream os=new ByteArrayOutputStream();
        copy(is, os);
        data=os.toByteArray();
        System.out.println(data.length);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        InputStream is = new ByteArrayInputStream(data);
        OutputStream os=new FileOutputStream("eyecopy2.jpg");
        copy(is, os);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

функция копирования

public static void copy(InputStream is,OutputStream os) {
    try {
        byte[] data=new byte[1024];
        int len=-1;
        while((len=is.read(data))!=-1) {
            os.write(data,0,data.length);
        }   
        os.flush();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }finally {
        if(null!=os) {
        try {
            os.close();
        } catch (IOException e) {
            // TODO: handle exception
        }
    }
    if(null!=is) {
        try {
            is.close();
        } catch (IOException e2) {
            // TODO: handle exception
        }
    }
    }
}

1 Ответ

2 голосов
/ 10 февраля 2020

Посмотрите на время l oop

while((len=is.read(data))!=-1) {
    os.write(data,0,data.length);
}   

Он пишет data.length, который всегда равен 1024, длине буфера. Но в конце потока считываемая сумма не обязательно равна 1024 байтам.

Вместо этого попробуйте записать сумму, прочитанную в:

while((len=is.read(data))!=-1) {
    os.write(data, 0, len); // <-- here
}   
...