Sto progettando l'API per un client di un servizio che recupera i dati come flusso di byte. qual è il vantaggio di utilizzareSe un metodo API pubblico restituisce InputStream o byte []
InputStream getData(String param1, String param2);
oltre
byte[] getData(String param1, String param2);
Il metodo che restituisce l'InputStream mi preoccupa perché
- ora il mio codice deve dipendere da codice esterno per chiudere l'InputStream . So che è una buona pratica chiudere solo le risorse che apri, quindi questo sembra sbagliato.
- L'inputstream non è ripetibile. Una volta che il client del mio codice legge lo stream, i byte vengono persi
- Lo stream nella mia implementazione è in realtà sulla rete (socket). Mentre sto usando un pool di connessioni e lo sto monitorando per sbarazzarmi delle connessioni scadute, penso che potrebbe essere meglio riuscire a chiudere le risorse che ho aperto.
Qual è il modo migliore per progettare questo? Ho anche considerato l'utilizzo di
void writeData(String param, String param, OutputStream os);
ma questo rende il metodo non intuitivo.
Qual è la dimensione media dei dati? –
I dati sono quasi tutti in Kbs A volte in 100s di Kbs e in rari casi saranno alcuni Mb ... i dati non sono davvero enormi .. Per lo più testo e alcune volte immagini e raramente video – subodh
I client possono fare qualsiasi cosa utile con il parziale dati (mentre viene trasmesso in streaming) o devono attendere l'intero dato? – DNA