我使用以下代码从网址获取图片:
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);
此代码没问题,但我的互联网连接非常糟糕,
所以,我可能会得到这样一张破碎的照片:
如何确保图片文件完整?
我认为您可以添加此代码以尝试测试:
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);
感谢您的帮助:)
答案 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())。在大多数情况下,这将有所帮助。
在另一种情况下,您可以分析图像标题以获取其长度,但这需要为每种格式使用专用分析器。