2014-06-19 17 views

risposta

15

Sì, è possibile utilizzare l'annotazione @Streaming disponibile dalla versione 1.6.0. Assicurati di usare quella versione.

Come specificato nello changelog: Nuovo: @Streaming su un tipo di risposta salterà il buffering del corpo su un byte [] prima della consegna.

interface Api {   
    @Get("path/to/your/resource") 
    @Streaming 
    Response getData(); 
} 

Si dovrebbe quindi essere in grado di streaming direttamente dal InputStream in questo modo

Response response = api.getData() 
InputStream is = response.getBody().in(); 
// stream your data directly from the InputStream! 

Tenete a mente che il mio esempio è sincrona per semplicità.

2

Per completare @Miguel Lavigne risposta qui è come farlo con Retrofit 2:

interface Service { 
    @GET("path/to/your/resource") 
    @Streaming 
    Call<ResponseBody> getData(); 
} 


Call<ResponseBody> call = service.getData(); 
try { 
    InputStream is = call.execute().body().byteStream(); 
    (...) 
} catch (IOException e) {...} 
Problemi correlati