youngplayee 2016-09-26 07:58 采纳率: 0%
浏览 1324

java ImageIO 有bug?

我调用ImageIO.read(path);方法读取一张分辨率为宽:27919 高:28386的jpg图片,运行中抛出如下异常。第一眼以为是图片尺寸过大,超过了整型最大值。可是简单计算之后发现,整型最大值0x7fffffff(2147483647)比我这个图片的宽高的乘积大得多。

java.lang.IllegalArgumentException: Array size > Integer.MAX_VALUE!
at javax.imageio.ImageTypeSpecifier.createBufferedImage(ImageTypeSpecifier.java:1064)
at javax.imageio.ImageReader.getDestination(ImageReader.java:2879)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1046)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:1014)
at javax.imageio.ImageIO.read(ImageIO.java:1422)
at javax.imageio.ImageIO.read(ImageIO.java:1282)

jdk相关的源代码如下,我根据这样的写法单独写了个简单的测试程序。

public SampleModel getSampleModel(int width, int height) {
    if ((long)width*height > Integer.MAX_VALUE) {
        throw new IllegalArgumentException
            ("width*height > Integer.MAX_VALUE!");
    }
    return sampleModel.createCompatibleSampleModel(width, height);
}


    测试程序如下。结果也是smaller,真是搞不懂啊! 求大神指点啊!!!!

    private static void test(int width,int height){
 if ((long)width*height > Integer.MAX_VALUE) {
      System.out.println("bigger!");
 }   
 else{

     System.out.println("smaller!");
 }

}
public static void main(String[] args) {
    int a = 27919;
    int b = 28386;
    test(a,b);
}
  • 写回答

5条回答 默认 最新

  • 执笔记忆的空白 博客专家认证 2016-09-26 08:51
    关注

    mageTypeSpecifier.java:1064 你看下这个类的1064行,java.lang.IllegalArgumentException: Array size > Integer.MAX_VALUE! 异常是说这个,数组的大小超过了Integer的最大值,你好好看下

    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?