GoogleのグアバでのInputStreamのためInputSupplierを作成するための簡潔なの方法はありますか?

StackOverflow https://stackoverflow.com/questions/2363408

  •  23-09-2019
  •  | 
  •  

質問

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>を返すファクトリメソッド

ディミトリスが示唆するように、

は、InputSupplierInputStreamIterableに関するのと同じ方法で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を追加するためにグアバの作者にためらいを理解しますそれらが同じである場合、データの任意の他の処理を行うことなく、参照してください?これらのバイトは、ネットワークソケットのように、非反復可能読み取りソースから来るのですか?そうでなければ、それだけでファイルのどこかに、またはメモリ内のバイト配列であれば、平等のテストを行うために自分自身を貸す他の方法がある。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top