2015-02-04 2 views
0

예외가없는 임의의 이미지 읽기 오류가 발생하는 것으로 보이는 다음 코드가 있습니다. 배치 작업에서 다음 이미지 URL을 실행 중이며 다른 URL 중 일부는 작동하지 않습니다. ImageIO.read는 완벽하게 작동하는 URL이지만 null입니다. 게시 된 URL은 내가 실패를 경험 한 URL입니다. 누구든지이 코드가 실패 할 수있는 원인을 알고 있습니다.ImageIO.read() 예외 및 vaild url없이 오류가 발생했습니다.

Java 8도 사용하고 싶습니다.

try {    
     URL url; 

     url = new URL("https://content.homenetiol.com/672/27185/640x480/4d352f4ff9cf4948a93612e91401e128.jpg"); 

     BufferedImage sourceImg = ImageIO.read(url); 
     System.out.println(sourceImg); 

    } catch (MalformedURLException ex) { 
     System.out.println("MalformedURLException " + ex.getMessage()); 
    } catch (IOException ex) { 
     System.out.println("IOException " + ex.getMessage()); 
    } 

또한 작업 URL

https://content.homenetiol.com/672/27185/640x480/49a9236f2196432db81e477fde44e756.jpg 
+2

이 "실패"정의 : 서버가 302 리디렉션으로 응답하는 경우에도 여기에

이미지를 가져 오기 위해 아파치 HttpClient를 사용하는 코드이며, 작동합니다. 예외가 발생하지 않는다면 어떤 일이 일어나고 있다고 생각합니까? 또한,'IOException' 캐치의 결과가 잘못되었습니다. –

+0

제가 말했듯이, sourceImg은 null입니다. 여러분이 직접 코드를 시도해 볼 수 있습니다. 똑같은 일이 일어날 것입니다. –

+0

코드가 유용합니다. 나는'null '이 아닌'BufferedImage' 객체로 채워진 sourceImg를 얻습니다. – kurochenko

답변

1

나는 서버가 가끔 표준 자바 URL가 처리하지 않는 302 리디렉션 응답으로 응답 curl 주위에 일 처리에서 꽤 확신한다.

try (CloseableHttpClient httpclient = HttpClients.createDefault()) { 
    HttpGet httpget = new HttpGet("https://content.homenetiol.com/672/27185/640x480/4d352f4ff9cf4948a93612e91401e128.jpg"); 
    try (CloseableHttpResponse response = httpclient.execute(httpget); 
     InputStream stream = response.getEntity().getContent()) { 
    BufferedImage sourceImg = ImageIO.read(stream); 
    System.out.println(sourceImg); 
    } 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

고마워, 완벽하게 작동하는 것 같습니다. 한 가지 간단한 질문은이 코드가 성능 저하를 초래할 것인가하는 것입니다. "현재 코드가 전혀 작동하지 않았 음"그러나 궁금한 점이 있습니다. 다시 한번 감사드립니다. –

+0

리다이렉트는 두 가지 요청을 필요로하며, 첫 번째 요청에서 서버가 데이터를 제공 한 경우보다 속도가 느릴 수 있지만 올바른 결과를 제공하지 않는 것을 비교하는 경우처럼 그렇게되지는 않습니다. 비교가 완전히 적절하다는 것을 명심하십시오. 나는 HttpClient를 사용하는 것이 서버가 첫 번째 요청에서 데이터를 포기하는 경우'URL'을 사용하는 것보다 성능면에서 뚜렷하게 다르지 않을 것이라고 생각합니다. – msandiford

+0

'HttpURLConnection'은 실제로 리디렉션을 처리하며, API를 가지고 있습니다. – EJP

관련 문제