2016-08-28 11 views
-1

私は最大ファイルサイズを検証するコードを書いています。IOUtils.read()の後でInputStreamに何が起こるか

public static void main(String[] args) throws IOException { 

    final InputStream inputStream = new FileInputStream(new File("/path/to/image.jpg")); 

    System.out.println("initial: " + inputStream.read()); 

    int arr = IOUtils.read(inputStream, new byte[2000001]); 
    if (arr == 2000001) { 
     System.out.println("file size greater than limit"); 
    } 
    System.out.println("after: " + inputStream.read()); 
} 

出力

initial: 255 
file size greater than limit 
after: 21 

質問は、それがIOUtils.readに渡されたときのInputStreamに何が起こるかですか()?私は同じInputStream参照をのメソッドのアップロードメソッドであるs3バケットに渡すと、イメージが保存されます。誰でも私に何が起こっているのかを伝えることはできますか?

+0

読み取り位置が増分されます。 – tkausl

+0

@tkausl:IOUtils.read()を使ってファイルサイズをチェックするのは正しいですか? – user1120946

+1

いいえhttp://stackoverflow.com/questions/2149785/get-size-of-folder-or-file – tkausl

答えて

1

InputStreamから何かを読んだら、それは 'なくなっています'。読み込み位置は入力に沿って上に移動します。そのため、ファイル内のバイト数をカウントしようとすると忙しくなりますが、同時に格納されていないため、データを失うことになります。したがって、ファイルを保存するためにInputStream参照を渡すと、ストリーム/ファイルの先頭にリーダーがなくなり、ファイルが破損します。

ファイルのサイズは、別の方法で取得できます。

java.io.File file = new java.io.File("example.file"); 
file.length(); 

ファイルが大きすぎない場合は、ファイルを保存することができます。ファイルサイズを確認するには、@ tkauslが提供するlinkを確認してください。

+0

情報のために@ phychiusありがとうございました。実際に私はJersey RESTからInputStreamとしてイメージを取得しています。そのInputStreamをs3バケットにアップロードするために渡しました。私はちょうどサイズを確認するためにそれをjava.io.fileに変換するのはちょっと奇妙だと思います。 – user1120946

+0

@ user1120946投稿したコードはすでに 'java.io.File'を使用しています。それが実際のコードではない場合は、あなたの質問は役に立たず、また、ファイルを2回読み込むことを意図している場合は同じです。 – EJP

関連する問題