I flussi di byte contengono, beh, byte. Suddiviso in quello che è in realtà, è composto da 8 bit di 1 e 0. Se rappresentasse un numero, sarebbe un qualsiasi numero compreso tra 0 e 255 (che, posso aggiungere, non è una coincidenza il motivo per cui i 4 numeri in un indirizzo IP vanno sempre da 0 a 255). Byte stream sono in genere interfacce sofisticate che servono 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 svuota, in quel momento riempie semplicemente il buffer ancora).
Cosa diavolo rappresenta? Beh, potrebbe rappresentare un file di testo, un'immagine o uno streaming video live. Ciò che è dipende interamente dal contesto di chi lo sta leggendo. La rappresentazione esadecimale è un altro modo di dire la stessa cosa, anche se a volte è più conveniente gestire i byte in termini di rappresentazione esadecimale piuttosto che di numeri, tuttavia è la stessa cosa.
Quando ti riferisci a dati grezzi, di solito ti riferisci ai dati di byte. I dati vengono senza un tag che dice "I am an file image!" Solitamente si tratta solo di dati grezzi quando non si cura veramente di 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 ogni 3 byte letti (che sarebbe in realtà la rappresentazione del colore rosso, la rappresentazione del colore verde e la rappresentazione di colore blu), aggiungi il suo valore numerico e dividi per 3, quindi scrivi quel valore 3 volte. Essenzialmente quello che farei è calcolare la media dei valori di rosso, verde e blu di un pixel e rendere il suo pixel equivalente grigio da quello. Tuttavia, quando parli di eseguire operazioni sui dati a livello di "byte per byte", non ti interessa davvero il quadro generale, per così dire.
Oppure, forse si desidera salvare un file in un database, ma chiede di inserire i suoi "dati grezzi" in un tipo di dati BLOB. Ciò 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 recuperi quel valore dal database, sarà semplicemente un grande array di byte come inizialmente fornito al database per cominciare. Se quel dato era un file, allora tu, il programmatore, devi reinterpretare quei dati di byte come se stessi leggendo un file un byte alla volta.
Se qualcuno ti chiedesse di "invertire i dati a 4 byte", suppongo 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 dì che hai 0x01, 0x02, 0x03 e 0x04. Per invertire questi, avresti invece 0x04, 0x03, 0x02, 0x01. Il sistema leggerà presumibilmente questi 4 byte nell'ordine inverso e, poiché l'hai già invertito, il valore viene interpretato in modo identico a quanto previsto nei dati non elaborati.
Spero che lo spieghi!