Vantaggi di Java ByteArrayInputStream vs array di byte?

3

Ho uno scenario in cui il mio processo Java riceverà un flusso di dati binari:

public class DataHandler {
    public void handleData(DATA data) {
        // TODO: Do something with data
    }
}

Sto cercando di capire la corretta digitazione per DATA . Potrei usare byte[] :

public class DataHandler {
    public void handleData(byte[] data) {
        // TODO: Do something with data
    }
}

O una ByteArrayInputStream :

public class DataHandler {
    public void handleData(ByteArrayInputStream dataStream) {
        // TODO: Do something with dataStream
    }
}

Per me, " ByteArrayInput Stream " implica un flusso continuo di dati che viene costantemente modificato. In base a ciò, sente come ByteArrayInputStream è più adatto per il mio caso d'uso in quanto probabilmente aggiunge un po 'di campane e fischietti su un semplice' ole byte[] . Ma poi vedo che il suo costruttore prende byte[] e non ti permette di aggiungere più byte s alla post-costruzione, il che potrebbe non fare necessariamente nulla per me in questo caso particolare.

Quindi le mie domande:

  1. Nel mio caso d'uso, ci sono dei benefici a ByteArrayInputStream rispetto a byte[] ? Perché perché no? Quali sono i fattori che guidano questa decisione (in generale)?
  2. Esiste un modo migliore per rappresentare un vero flusso di dati che scorre (che alla fine arriva come byte) oltre ai metodi che ho consigliato qui?
posta herpylderp 03.09.2014 - 19:08
fonte

1 risposta

4

InputStream stesso è già un'astrazione di un flusso di byte che può essere letto. Un ByteArrayInputStream è un'implementazione specifica di InputStream che ottiene i byte nel flusso da un array byte sottostante (quello che il costruttore vuole che tu fornisca).

Per il tuo metodo qui, probabilmente non c'è molto vantaggio nell'avere un ByteArrayInputStream , un InputStream sicuramente, dato che i client potrebbero quindi passare tutti i tipi di origini di byte al tuo metodo, mentre altrimenti dovrebbero leggere loro stessi in un array. Un flusso ha anche il vantaggio che non è necessario avere tutti i byte in memoria nello stesso momento, il che è conveniente se la dimensione dei dati è grande e può essere facilmente gestita in piccoli blocchi.

    
risposta data 03.09.2014 - 20:43
fonte

Leggi altre domande sui tag