2016-10-20 7 views
-1

zip 폴더의 압축을 풀려고하는데 문제가있는 경우 ZipInputStream.read(byte[])의 작동 방식을 이해해야합니다. 이 코드는 정상적으로 작동하지만 내 파일이 내가 작동하는 방법을 설정 한 버퍼보다 ​​큰지 여부는 알 수 없습니다.InputStream.read (byte [])는 어떻게 작동합니까?

byte[] buffer = new byte[1024]; 
zipIs = new ZipInputStream(new FileInputStream(FILE_PATH)); 
while ((entry = zipIs.getNextEntry()) != null) { 

     String entryName = File.separator + entry.getName(); 

     // Call file input stream 
     FileOutputStream fos = new FileOutputStream(entryName); 

     int len; 
     // Write current entry 
     while ((len = zipIs.read(buffer)) > 0) { 
      fos.write(buffer, 0, len); 
     } 
     fos.close(); 
     } 

나는 문서를 읽었지만 혼란 스럽습니다. 도움주세요.

답변

1

ZipInputStream.read(byte[])의 작동 방식에 문제가 있습니다.

는 그것은 InputStream.read(bytes[])javadocs에 설명되어 있습니다 :

이 코드가 작동 잘하지만 내 파일이 내가 운영 것입니다 방법을 설정할 버퍼보다 ​​큰 경우 모르겠어요.

그게 바로 루프입니다. read 호출이 제로 (또는 그 이하)까지 반환

while ((len = zipIs.read(buffer)) > 0) { 
     fos.write(buffer, 0, len); 
    } 

그것은 바이트 읽기 개수 len 설정 한 번에 하나의 버퍼를 판독한다. 각 버퍼 풀 작성하는 방법 바이트 말을 len를 사용하여 작성하고이 반복됩니다 ...

while ((a = call()) > 0) { 구문은 단순히 할당 (예 : (a = call()))이있다 값 표현이 사실을 악용한다 값은 변수에 할당되었습니다.

스트림을 읽는 것은이 관용구가 일반적으로 사용되는 한 가지 상황입니다. 그것을 기억할 가치가 있습니다.