如何确保我的图片完整? (在java中)

时间:2011-01-13 00:48:25

标签: java

我使用以下代码从网址获取图片:

    URL url=new URL("http://www.google.com/images/logos/ps_logo2.png");
    InputStream in=url.openStream();
    ByteArrayOutputStream tmpOut = new ByteArrayOutputStream();
    byte[] buf = new byte[512];
    int len;
    while (true) {
        len = in.read(buf);
        if (len == -1) {
            break;
        }
        tmpOut.write(buf, 0, len);
    }
    tmpOut.close();

    byte[] picture=tmpOut.toByteArray();
    System.out.println(picture.length);

此代码没问题,但我的互联网连接非常糟糕,

所以,我可能会得到这样一张破碎的照片:

alt text

如何确保图片文件完整?

我认为您可以添加此代码以尝试测试:

if (len == -1) {更改为if (len == -1 || (int)(Math.random()*100)==1 ) {

完整的测试代码:

    URL url=new URL("http://www.google.com/images/logos/ps_logo2.png");
    InputStream in=url.openStream();
    ByteArrayOutputStream tmpOut = new ByteArrayOutputStream();
    byte[] buf = new byte[512];
    int len;
    while (true) {
        len = in.read(buf);
        if (len == -1 || (int)(Math.random()*100)==1 ) {
            break;
        }
        tmpOut.write(buf, 0, len);
    }
    tmpOut.close();
    byte[] picture =tmpOut.toByteArray();
    System.out.println(picture.length);

感谢您的帮助:)

2 个答案:

答案 0 :(得分:3)

您是否考虑过使用ImageIO类来加载图片 - 它会为您处理很多这些细节:

Image image;
try {    
  URL url = new URL("http://www.google.com/images/logos/ps_logo2.png");
  image = ImageIO.read(url);
} catch (IOException e) {
   ...
}

答案 1 :(得分:1)

请尝试使用URL.openConnection() 您将获得一个URLConnection对象,您可以在该对象上查询内容长度(如果提供)(URLConnection.getContentLength())。在大多数情况下,这将有所帮助。

在另一种情况下,您可以分析图像标题以获取其长度,但这需要为每种格式使用专用分析器。