2011-01-27 9 views
2

FileBackedOutputStreamクラスからGoogle Guavaライブラリにアクセスし、バッファの種類として使用するのが適切かどうか疑問に思っていました。毎日1回、Webアプリケーションのプロセスで数万行約100文字含む)をFTPサーバー上のファイルにアップロードします。 FileBackedOutputStreamオブジェクトを使用して、これらの文字列をすべて最初に書き込んでから、FileBackedOutputStream.getSupplier().getInput()を使用してFTPクライアントにアクセスし、InputStreamを返します。これはFileBackedOutputStreamの正しい使用例ですか?FileBackedOutputStreamユースケース(Guava)

+0

InputStreamが必要な場合は、ByteArrayOutputStreamとByteArrayInputStreamを使用しないでください。そのシンプルさとより効率的になる可能性があります。 –

+0

これは私が言及したサイズのデータ​​、すなわち約100文字の長さの数万行(文字列)にも適していますか? –

+0

I/Oリソースを使用するときに重要なスレッドセーフです。試してみてください –

答えて

2

はい、それはFileBackedOutputStreamの許容可能な使用例になると思います。しかし、私はFileBackedOutputStreamが、サイズがかなり異なる可能性のあるデータを使用しているときに最適であると思います...メモリに収めることができる少量のデータに対して、メモリにバッファリングするだけで大​​量にそれをすべてメモリに読み込もうとすると、OutOfMemoryErrorというデータが出力される可能性があります。ファイルへのバッファリングに切り替える必要があります。これはFileBackedOutputStreamが本当に輝いているところだと思います。私はいくつかのことをする必要があるアップロードされたファイルをバッファリングするためにそれを使用しました。