2017-03-31 6 views
7

최근에 aws-java-sdk 1.11.108로 업그레이드해야했습니다. 나는 EC2 상자에 s3 객체 (8에서 10GB 크기)를 다운로드하고 스트림으로 처리하는 자바 프로그램을 가지고있다. 이 프로그램은 2 년 이상 아무런 문제없이 작동했지만 aws-java-sdk의 최신 버전으로 업데이트 한 후 내 파일 다운로드가 로그의 다음 WARN 메시지로 중단됩니다 (예외는 아님)S3ObjectInputStream에서 모든 바이트를 읽지 못했습니다. HTTP 연결을 중단합니다.

WARN:com.amazonaws.services.s3.internal.S3AbortableInputStream - Not all bytes were read from the S3ObjectInputStream, aborting HTTP connection. This is likely an error and may result in sub-optimal behavior. Request only the bytes you need via a ranged GET or drain the input stream after use.

S3Object s3Obj = s3client.getObject(new GetObjectRequest(bucketName, s3FileName)); 
Reader reader = new BufferedReader(new InputStreamReader(new GZIPInputStream(s3Obj.getObjectContent()); 

누군가가 스트림이 예외를 던지는 O/w를 자동으로 중단하고, 무엇을 작동하게하는 가장 좋은 방법은 이유를 알 수 있다면 나는 감사합니다. 당신은 모든 일을 통해 스캔 없이 아카이브의 내용을 나열 할 수 있도록

감사

+0

S3에 파일을 직접 압축 해제 할 때도 동일한 문제가 발생합니다. – florins

+0

아직도 클럽에 더 많은 장소가 있습니까? S3에서 동일한 문제가 발생합니다. – dcg

+0

나는 동일한 문제가있다. 나는 지금까지 해결책이 없다. –

답변

0

ZIP 아카이브는 끝에 (중복) 중앙 디렉토리 구조를 가지고있다. Java의 ZipInputStream은 실제로 기본 스트림에서 을 실제로 사용하지 않습니다. getNextEntry()는 곧바로 을 null로 반환하고, 중앙 디렉토리의 시작을 찾습니다. while (in.read()> = 0)을 추가해보십시오. 오버라이드 close 메서드를 통해 기본 스트림의 끝까지 읽을 수 있습니까?

https://github.com/aws/aws-sdk-java/issues/1111

0

한 번만 close() 입력 스트림을해야합니다.