Class BidiStream<RequestT,ResponseT> (2.10.0)

  public 
  
 class 
 BidiStream<RequestT 
 , 
 ResponseT 
>  
 extends 
  
 ServerStream<ResponseT> 
  
 implements 
  
 ClientStream<RequestT> 
 

A wrapper around a bidirectional stream.

This class asynchronously pulls responses from upstream via StreamController#request(int) and exposes them via its Iterator. The implementation is back pressure aware and uses a constant buffer of 1 item.

Please note that the stream can only be consumed once and must either be fully consumed or be canceled.

This class can also be used to send requests to the server using #send(Object) .

Neither this class nor the iterator it returns is thread-safe.

In the example below, we iterate through responses from the server and echo back the items we see:

   
 BidiStream<Item> 
  
 stream 
  
 = 
  
 ...; 
  
 for 
  
 ( 
 Item 
  
 item 
  
 : 
  
 stream 
 ) 
  
 { 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 item 
 . 
 id 
 ()); 
  
 stream 
 . 
 send 
 ( 
 item 
 . 
 id 
 ()); 
  
 // Allow for early termination 
  
 if 
  
 ( 
 item 
 . 
 id 
 (). 
 equals 
 ( 
 "needle" 
 )) 
  
 { 
  
 // Cancelling the stream will cause hasNext() 
to return false on the next iteration, 
  
 // naturally breaking the loop. 
  
 stream 
 . 
 cancel 
 (); 
  
 } 
  
 } 
  
 

Inheritance

java.lang.Object > ServerStream > BidiStream<RequestT,ResponseT>

Implements

com.google.api.gax.rpc.ClientStream<RequestT>

Type Parameters

Name Description
RequestT
ResponseT

Methods

closeSend()

  public 
  
 void 
  
 closeSend 
 () 
 

Closes the sending side of the stream. Once called, no further calls to #send(Object) , #closeSend() , or #closeSendWithError(Throwable) are allowed.

Calling this method does not affect the receiving side, the iterator will continue to yield responses from the server.

closeSendWithError(Throwable t)

  public 
  
 void 
  
 closeSendWithError 
 ( 
 Throwable 
  
 t 
 ) 
 

Closes the sending side of the stream with error. The error is propagated to the server. Once called, no further calls to #send(Object) , #closeSend() , or #closeSendWithError(Throwable) are allowed.

Calling this method does not affect the receiving side, the iterator will continue to yield responses from the server.

Parameter
Name Description
t Throwable

isSendReady()

  public 
  
 boolean 
  
 isSendReady 
 () 
 

Reports whether a message can be sent without requiring excessive buffering internally.

This method only provides a hint. It is still correct for the user to call #send(Object) even when this method returns false .

Returns
Type Description
boolean

send(RequestT req)

  public 
  
 void 
  
 send 
 ( 
 RequestT 
  
 req 
 ) 
 

Send req to the server.

Parameter
Name Description
req RequestT
Create a Mobile Website
View Site in Mobile | Classic
Share by: