苦瓜老鬼 2023-07-19 15:33 采纳率: 100%
浏览 31
已结题

java IO复制图片生产环境奇慢的问题

下面这段代码在生产环境上出现图片复制很慢的问题。一张照片复制要50-120秒,本地和测试环境复制又很快,不清楚问题可能存在的原因。

img

  • 写回答

3条回答 默认 最新

  • 藏柏 2023-07-19 15:40
    关注

    在代码中,可能会导致图片复制慢的问题有几个可能的原因:

    1. 缓冲区大小过小:在代码中,创建了一个大小为5的字节数组作为缓冲区,这可能导致每次读取和写入的数据量较小,从而增加了系统调用的次数,导致复制速度变慢。尝试增大缓冲区的大小,例如使用较大的字节数组,可以提高复制速度。

    2. 磁盘读写性能问题:生产环境的磁盘读写性能可能不如本地或测试环境,这可能导致复制过程变慢。建议检查生产环境的磁盘性能,并确保磁盘正常运行。

    3. 其他并发操作或资源竞争:如果在生产环境中存在其他并发操作或资源竞争,可能会导致图片复制变慢。例如,其他进程可能正在占用磁盘资源,或者同时进行大量的文件操作。确保没有其他进程或操作影响到图片复制过程。

    另外,还有一些优化的建议:

    1. 在复制大文件时,使用更大的缓冲区可以提高复制速度。可以尝试使用更大的字节数组作为缓冲区,例如使用byte[] data = new byte[8192]

    2. 使用 try-with-resources 语句可以确保在处理完文件流后,及时关闭流资源,避免资源泄露。

    下面是更新后的代码示例:

    public boolean imageCopy(String path, String path2) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        File newImage = null;
        
        try {
            File oldImage = new File(path); // 需要复制的图片文件
            newImage = new File(path2); // 图片复制后的
    
            if (!newImage.exists()) {
                newImage.createNewFile();
            }
    
            fis = new FileInputStream(oldImage);
            fos = new FileOutputStream(newImage);
    
            byte[] data = new byte[8192]; // 使用较大的缓冲区
    
            int len;
            while ((len = fis.read(data)) != -1) {
                fos.write(data, 0, len);
            }
    
            return true;
        } catch (IOException e) {
            e.printStackTrace();
    
            if (newImage != null && newImage.exists()) {
                newImage.delete();
            }
    
            return false;
        } finally {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

    尝试使用以上优化建议,并对生产环境的磁盘性能和并发操作进行检查,以解决图片复制慢的问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月27日
  • 已采纳回答 7月19日
  • 创建了问题 7月19日