2011-12-14 8 views
3

タイトルによれば、ファイルにはInputStreamの「後ろ」にあるバイト数を知る必要があります。 すべてのバイトをダウンロードしたくない(時間がかかります)。私はちょうどファイルが持っているバイト数を知る必要があります。このよう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のいくつかの実装は、ストリーム内の総バイト数を返します。一方で、多くの意志ではありません。

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

一度に1バイトをスキップできますか?なぜあなたは正確なサイズを知る必要がありますか? –

+0

Dropboxにファイルをアップロードしており、そのAPIにアップロードするバイト数が正確に必要です。 – Timo

関連する問題