GoogleのグアバでのInputStreamのためInputSupplierを作成するための簡潔なの方法はありますか?
質問
InputSuppliersを作成するには、Googleのグアバのいくつかのファクトリメソッドは、例えば、ありますbyte[]
から:
ByteStreams.newInputStreamSupplier(bytes);
またはFile
から
Files.newInputStreamSupplier(file);
与えられたInputSupplier
ためInputStream
を作成するための同様の方法はありますか?
つまり、匿名クラスよりも簡潔だ道ます:
new InputSupplier<InputStream>() {
public InputStream getInput() throws IOException {
return inputStream;
}
};
背景:私は、例えばと、入力ストリームを使用したいですFiles.copy(...)
またはByteStreams.equal(...)
ます。
解決
いいえ、私は何を見ていない。私はあなたが最善の方法を見つけたと思う
。バイト配列またはファイルに入力ストリームを格納し、ByteStreams.newInputStreamSupplierとサプライヤーを作成するための唯一の代替
()またはFiles.newInputStreamSupplier()が、私はそのように行うことを思いとどまらう。
また
public static long copy(InputStream from, OutputStream to)
から ByteStreams
を使用することができます
参照: SRC の
他のヒント
InputStream
が新鮮な、新しいInputSupplier<InputStream>
そのInputSupplier<InputStream>
メソッドが呼び出されるたびに作成することができますオブジェクトことになっているので、は、InputStream
に任意getInput()
を変換する方法はありません。バイトの基礎となるソースは、再使用のために利用可能である場合にのみ可能です。したがってbyte[]
又はFile
を取り、InputSupplier<InputStream>
を返すファクトリメソッド
は、InputSupplier
はInputStream
がIterable
に関するのと同じ方法でIterator
に関する。それはのと同じがgetInput()
が呼び出されるたびにストリーミングするため、後続の呼び出しが既に枯渇して閉じられているInputStream
を返します。
ここにあなたの匿名クラスと別の問題である:InputSupplier
の動機の一部は、それが自動的に閉じることができるように、実際のInputStream
の可視性を制限することです。あなたはInputStream
で外部に見えるInputSupplier
をラップしてから、ユーティリティメソッドにそれを渡した場合、ユーティリティメソッドは、あなたのInputStream
を閉じることができます。あなたはそれでOKかもしれないが、それはグアバが促進したいというクリーンな使用パターンではありません。
、私は後方にそれをやっていたが実現しました。代わりにこれを行う:
Files.copy(InputSupplier.of(inputStream), destinationFile);
(存在しない)、私の代わりにこれを実行する必要があります:
ByteStreams.copy(inputStream, Files.newOutputStreamSupplier(destinationFile));
これは、反復処理可能にIteratorを包むように間違っているようになり、私は図書館に行くようなもののゼロ確率のような存在であると感じています。 elouが言うように、あなたはByteStreams.copy()メソッドを使用することができますが、二つの流れに等号()を行うための明白な理由があるようには思えません。
それは完全に(または部分的に、しかし、ストリームが残っていたところ、それは使用不可能のように良いようですので、知らなくても、その後の)だけに2つのストリームを読み取るようにすることができますどのように共通 -私は(ささい)メソッドなど、Aを追加するためにグアバの作者にためらいを理解しますそれらが同じである場合、データの任意の他の処理を行うことなく、参照してください?これらのバイトは、ネットワークソケットのように、非反復可能読み取りソースから来るのですか?そうでなければ、それだけでファイルのどこかに、またはメモリ内のバイト配列であれば、平等のテストを行うために自分自身を貸す他の方法がある。