I flussi di byte contengono, beh, byte. Suddiviso in quello che è in realtà, è composto da 8 bit composti da 1 e 0 secondi. Se rappresentasse un numero, sarebbe qualsiasi numero compreso tra 0 e 255 (il che, posso aggiungere, non è un caso perché i 4 numeri in un indirizzo IP siano sempre compresi tra 0 e 255). I flussi di byte sono in genere interfacce sofisticate intese a nascondere l'array di byte di base sottostante utilizzato per contenere un buffer circolare (si riempie il buffer e si attende che qualcuno lo svuoti, a quel punto semplicemente riempie nuovamente il buffer).
Che diamine rappresenta? Bene, potrebbe rappresentare un file di testo, o un'immagine o un flusso video live. Ciò che è dipende interamente dal contesto di chi lo sta leggendo. La rappresentazione esadecimale è un altro modo di dire la stessa cosa, sebbene a volte sia più conveniente gestire i byte in termini della loro rappresentazione esadecimale piuttosto che i numeri, tuttavia è la stessa cosa.
Quando ti riferisci a dati grezzi, di solito ti riferisci a dati byte. I dati arrivano senza un tag che dice "I am a image file!" Di solito ti occupi solo di dati grezzi quando non ti interessa davvero ciò che i dati rappresentano nel complesso. Ad esempio, se volessi convertire un'immagine nella sua versione in bianco e nero, potrei dire di leggere i dati grezzi di un'immagine e per ogni 3 byte letto (che sarebbe effettivamente la rappresentazione del colore rosso, la rappresentazione del colore verde e la rappresentazione di colore blu), aggiungi il valore numerico e dividi per 3, quindi scrivi quel valore 3 volte. In sostanza quello che farei è calcolare la media dei valori rosso, verde e blu di un pixel e ricavarne un pixel equivalente grigio. Tuttavia, quando si parla di eseguire operazioni su dati a livello di "byte per byte", non si '
O forse si desidera salvare un file in un database, ma richiede di inserire i suoi "dati non elaborati" in un tipo di dati BLOB. Questo significa semplicemente convertire i dati di un file in un array di byte di grandi dimensioni che il database può comprendere e gestire. Scoprirai che quando recupererai quel valore dal database, sarà semplicemente un array di byte di grandi dimensioni come inizialmente fornito al database. Se quei dati erano un file, tu, il programmatore, devi reinterpretare quei dati di byte come se stessi leggendo un file alla volta.
Se qualcuno ti chiedesse di "invertire i dati a 4 byte", assumerei che si riferisca all'interpretazione big-endian vs little-endian dei numeri, che scrive numeri che iniziano con il byte più o meno significativo. Non importa se un numero è rappresentato come big-endian o little-endian, solo che tutti i sistemi che leggono il numero lo interpretano in modo coerente.
Questo non vuol dire che la rappresentazione numerica effettiva (o la rappresentazione esadecimale per quella materia) sia cambiata, semplicemente che l'ordine in cui questi 4 byte formano un numero dovrebbe essere invertito. Quindi supponiamo di avere 0x01, 0x02, 0x03 e 0x04. Per invertire questi, avresti invece 0x04, 0x03, 0x02, 0x01. Il sistema dovrebbe presumibilmente leggere questi 4 byte nell'ordine inverso e poiché lo hai già invertito, il valore viene interpretato come lo stesso di quello previsto nei dati non elaborati.
Spero che questo lo spieghi!