---
schema_version: "1"
id: 00e8d5ad19234d0abb2d8fe78fc0cb845c5d3145822d1477e7fbb3c10cca2db1
title: バイナリストリーミング
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/mule-sdk/1.1/binary-streaming.md
canonical_url: https://docs.mulesoft.com/jp/mule-sdk/1.1/binary-streaming
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 86cd7a97fd5b6a53a9df44628970904427e998f4ba7d19357031430534ffb767
description: MuleSoft Documentation Site
release: "1.1"
latest: false
---
# バイナリストリーミング

バイナリストリーミングのユースケースでは、ストリームは、何を表すかに関係なく一般的な方法で処理されるバイトの集まりです。たとえば、HTTP 要求の応答、FTP サーバーでのファイルの取得と書き込みなどがあります。

SDK は、Java ​`InputStream`​ クラスを使用してこの抽象化をサポートします。

## [](#操作でのバイナリストリーミング)操作でのバイナリストリーミング

操作は、ストリームパラメーターを受け取るか、ストリームを返すか、またはその両方を行うことができます。

ファイルコネクタの Write 操作は、ストリームに対して行う操作の例です。

```java
public class FileOperations {

    public void write(@Content InputStream content, String path) {
        // do the writing
    }
}
```

`InputStream`​ 型のパラメーターがある場合、SDK は Mule のストリーミング機能を使用するために必要なすべてのサポートを提供します。上記の例の ​`content`​ パラメーターは、常にストリームの先頭を指す反復可能なストリームに割り当てられ、それが true であるかどうかに関係なく、ストリームが初めて読み取られるかのように処理します。

もう一つの可能性は、Read 操作のように、代わりにバイナリストリームを​_返す_​操作です。

```java
public class FileOperations {

    public InputStream read(String path) {
        // do the reading
    }
}
```

`InputStream`​ を返す場合、SDK はそのストリームを反復可能にするために必要なすべてのマジックを自動的に追加します。

## [](#ストリーミングの設定)ストリーミングの設定

`<repeatable-file-store-stream />`​、​`<repeatable-in-memory-stream />`​、​`<non-repeatable-stream />`​ などの要素を許可することで、SDK はストリーミングの動作方法を設定するためのサポートを自動的に追加します。上記の Read の例でカスタムファイルストアストリーミングを設定する例を次に示します。

```xml
<file:read path="myFile.json">
    <repeatable-file-store-stream inMemorySize="10" bufferUnit="KB"/>
</file:read>
```

## [](#既存のファイルからのストリーミング)既存のファイルからのストリーミング

バージョン 1.3 以降で使用できます。

`<repeatable-file-store-stream>`​ 戦略を使用すると、メモリ内のバッファに入り切らない情報が一時的にファイルに格納されます。いくつかのケースでは、この戦略を効率的に使用できず、I/O 要件とディスクスペース要件が最適ではなくなります。

最も一般的なケースは次のとおりです。

シナリオ 1

ファイルの内容を返す操作またはソースを構築する場合です。開発しているコンポーネントは、ファイルを開いて、ファイルの内容を含む InputStream を返します。ファイルのサイズがメモリバッファより大きいと、<repeatable-file-store-stream> はストリームの内容で一時的なファイルの構築を開始します。このファイルは、すでに開いている元のファイルと内容がまったく同じ複製となります。

シナリオ 2

シナリオ 1 のバリエーションとして、操作またはソースが InputStream を取得してから、それを​_返す前に_​事前処理する必要がある場合です。元のストリームはまだフローにプッシュされていないため、まだ繰り返し可能ではありません。そのためソースは、元のストリームを処理している間は処理済みの内容を一時的なファイルに格納することで、自身でバッファ処理を実装する必要があります。事前処理が完了したら、ソースはファイルの内容をプッシュして、シナリオ 1 に戻ります。

これら 2 つのシナリオから、自身で新しいファイルを作成する繰り返し可能なストリーミングフレームワークを使用するのではなく、同じ内容がすでに元のファイルにあるわけですから、その既存ファイルの内容から繰り返し可能なストリームを取得すべきであることは明白です。

これらのシナリオでは ​`ImmutableFileRepeatableInputStream`​ クラスを使用します。このクラスは、標準クラスの ​`java.io.FileInputStream`​ と似ていますが、Mule Runtime Engine (Mule) が新しいバッファファイルを作成するのを防止し、既存のファイルを使用するように指示します。

たとえば、このクラスは次のような操作で使用できます。

```java
@MediaType(value = ANY, strict = false)
public InputStream read(String path) {
	File file = new File(path);
	if (!file.exists()) {
		// throw ModuleException
	}

	return new ImmutableFileRepeatableInputStream(file);
}
```

このような性質のファイルを処理する場合には、削除するタイミングを理解することが重要です。ユースケースによっては、自分で作成したコードでファイルを作成する必要になります。単純なケースでは、ストリームを閉じるときにファイルを削除できます。ストリームを閉じるときにファイルを削除する場合は、次の便利なコンストラクターを使用すれば、ストリームを閉じるときに自動的にファイルを削除するように Mule に指示できます。

`new ImmutableFileRepeatableInputStream(file, true);`​

<table><tbody><tr><td class="icon"><i class="fa icon-important" title="Important"></i></td><td class="content">この機能を使用するには、ファイルが不変である必要があります。つまり、​<code>ImmutableFileRepeatableInputStream</code>​ インスタンスが作成された後は、少なくとも ​<code>ImmutableFileRepeatableInputStream</code>​ が閉じるまでは、ファイルの内容を変更することはできません。フローの読み取り中にファイルの内容が変更されてしまうと、不整合やダーティリード、またはその他の競合が発生することがあります。</td></tr></tbody></table>

## [](#関連情報)関連情報

- [ストリーミング](https://docs.mulesoft.com/jp/mule-sdk/1.1/streaming)
- [反復可能ストリーム](#4.1@mule-runtime::streaming-about.adoc#repeatable_streams)