Javaでパイプを使用してOutputStreamをInputStreamに変換する方法?

Mary-Kate Olsen
リリース: 2024-11-10 00:48:02
オリジナル
246 人が閲覧しました

How to Transform an OutputStream into an InputStream Using Pipes in Java?

OutputStream から InputStream への変換: 解明

コーディングの領域では、データを OutputStream から InputStream にリダイレクトすることが必要になることがよくあります。この複雑な変換は、逆ほど単純ではありませんが、パイプを巧みに利用することで実現できます。

パイプの力を解読する

Java の java.io。 PipedInputStream クラスと java.io.PipedOutputStream クラスが、この変換プロセスの主要なプレーヤーとして登場します。これらは、OutputStream と InputStream の間に一方向のパイプラインを確立し、大幅なメモリ オーバーヘッドを発生させることなくシームレスなデータ転送を可能にします。

Lambda を利用した楽な変換のためのコード

以下コード スニペットはラムダを活用して変換を簡素化します。

PipedInputStream in = new PipedInputStream();
final PipedOutputStream out = new PipedOutputStream(in);
// in a background thread, write the given output stream to the
// PipedOutputStream for consumption
new Thread(() -> {originalOutputStream.writeTo(out);}).start();
ログイン後にコピー

Try-with-Resources: エレガントなアプローチ

あるいは、try-with-resources はエレガントな構文を提供します。リソースの管理について:

PipedInputStream in = new PipedInputStream();
new Thread(new Runnable() {
    public void run () {
        // try-with-resources here
        // placing the try block outside the Thread will prematurely close the PipedOutputStream
        try (final PipedOutputStream out = new PipedOutputStream(in)) {
            // write the original OutputStream to the PipedOutputStream
            originalByteArrayOutputStream.writeTo(out);
        } catch (IOException e) {
            // logging and exception handling should go here
        }
    }
}).start();
ログイン後にコピー

追加の考慮事項

OutputStream の作成を制御できない場合、ClosedPipeException が発生する可能性があります。これを解決するには、コンストラクターを反転します。

PipedInputStream in = new PipedInputStream(out);
new Thread(() -> {originalOutputStream.writeTo(out);}).start();
ログイン後にコピー

パイプ変換の利点

この変換方法は、メモリ効率の点で優れています。データの複製コピーを作成する他の手法とは異なり、パイプは追加のメモリを消費せずにストリーム間の接続を確立するだけです。さらに、別のスレッドでの非同期実行により、遅延が最小限に抑えられ、リソース使用量が削減されます。

以上がJavaでパイプを使用してOutputStreamをInputStreamに変換する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート