2011-12-14 2 views
3

제목에서 알 수 있듯이 파일에있는 바이트 수를 알아야합니다. 나는 모든 바이트를 다운로드하고 계산하고 싶지 않습니다 (오래 소요됩니다). 파일의 바이트 수를 알아야합니다. 이처럼Java InputStream 뒤에있는 파일의 바이트 수를 얻으십시오

: 그래서

int numberOfBytes = countBytes(inputStream); 

, 당신은 어떤 API가 없습니다 (countBytes (의 InputStream inputStream을) 전체 스트림을 소비하고 바이트를 계산보다는

+0

이 게시물을보십시오 : http://stackoverflow.com/questions/116574/java-get-file-size-efficiently –

+1

파일에 대한 액세스 권한이 있습니까, 아니면 그것에 대한 InputStream 있습니까? – Todd

+0

@Todd Javamail API를 통해 imap 서버에서 전자 메일 첨부 파일을 참조하는 스트림 만 있습니다. – Timo

답변

8

기타에 대한 구현을 할 수없는 필요 그것을 위해).

거기 available() 방법은, 그러나 그것은 아주 명시 적으로 요구하고 무엇을하지 않습니다

참고가되는 InputStream의 일부 구현 스트림에서 총 바이트 수를 반환하면서, 많은 의지 not.

InputStream이 파일 (소켓이 아니라)과 연결되어있는 경우 다른 API를 사용하여 크기를 얻을 수 있습니까?

+0

아니, 소켓이라고 생각해. 입력 스트림은 Javamail을 통한 전자 메일 첨부를 나타냅니다. – Timo

+0

안녕하세요 @Timo 당신이 다른 해결책을 찾았나요? – StrawhatLuffy

+0

@StrawhatLuffy 죄송합니다, 너무 오래 전 기억이 안 나네 :-) – Timo

2

skip()을 활용하여 파일 크기를 대략적으로 계산할 수 있습니까?

int bytes = 1024; // Chunk size for skipping. Adjust as necessary 
try { 
    int skipped = 0; 
    while(stream.available()) { 
     stream.skip(bytes); 
     skipped += bytes; 
     // Elided...do something with skipped 
    } 
} catch(IOException ex) { 
    // Handle a skip that's too big 
} 

난 당신이 영리이 루프를하고 피할 수 IOException을 피할 수 있다고 너무 확신하지만이 운동은 독자에게 왼쪽입니다.

+0

전에 말했듯이, 정확한 바이트 크기가 필요합니다. – Timo

+0

그런 다음 한 번에 한 바이트 씩 건너 뛸 수 있습니까? 왜 정확한 크기를 알아야합니까? –

+0

파일을 Dropbox에 업로드 중이며 API에 업로드 할 정확한 바이트가 필요합니다. – Timo

관련 문제