3.4. ストリーミング API
Data Grid は、InputStream
および OutputStream
のインスタンスを返すメソッドを実装する Streaming API を提供するため、Hot Rod クライアントと Data Grid サーバー間で大きなオブジェクトをストリーミングできます。
大きなオブジェクトの次の例を考えてみましょう。
StreamingRemoteCache<String> streamingCache = remoteCache.streaming(); OutputStream os = streamingCache.put("a_large_object"); os.write(...); os.close();
次のように、ストリーミングを通じてオブジェクトを読み取ることができます。
StreamingRemoteCache<String> streamingCache = remoteCache.streaming(); InputStream is = streamingCache.get("a_large_object"); for(int b = is.read(); b >= 0; b = is.read()) { // iterate } is.close();
Streaming API は値をマーシャリング しません。つまり、Streaming API と非 Streaming API の両方を同時に使用することはできません。ただし、このケースを処理するためにカスタムマーシャラーを実装することもできます。
RemoteStreamingCache.get(K key)
メソッドによって返される InputStream
は VersionedMetadata
インターフェイスを実装しているため、以下のようにバージョンと有効期限の情報を取得できます。
StreamingRemoteCache<String> streamingCache = remoteCache.streaming(); InputStream is = streamingCache.get("a_large_object"); long version = ((VersionedMetadata) is).getVersion(); for(int b = is.read(); b >= 0; b = is.read()) { // iterate } is.close();
条件付き書き込みメソッド (putIfAbsent()
、replace()
) は、値がサーバーに完全に送信されてから、実際の条件チェックを実行します。つまり、close()
メソッドが OutputStream
で呼び出される場合です。