Cos'è in realtà un flusso di byte?

30

Qualcuno può spiegarmi cosa contiene effettivamente il flusso di byte? Contiene solo byte (dati esadecimali) o dati binari o solo lettere inglesi? Sono anche confuso riguardo al termine "dati grezzi". Se qualcuno mi chiedesse di "invertire i dati a 4 byte", allora cosa dovrei supporre che i dati siano codice esadecimale o codice binario?

    
posta user2720323 05.11.2013 - 17:45
fonte

4 risposte

49

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!

    
risposta data 05.11.2013 - 18:13
fonte
16

Un byte è semplicemente un'unità di informazioni - può essere qualsiasi cosa. Un byte di per sé non significa nulla, devi attribuire una sorta di significato ad esso.

Quindi, per approfondire -

Does it contain bytes (hex data) or binary data or english letters only?

I dati esadecimali sono gli stessi dei dati binari. È solo un modo diverso di visualizzare i dati. Ad esempio, 0x41 = 0b01000001 = 'A' = 65 (decimale). Le lettere inglesi sarebbero solo un sottoinsieme di quello.

If someone asked me to "reverse the 4 byte data", then what should I assume the data is hex code or binary code?

Poiché hex è solo una rappresentazione dei dati, non importa come ci pensi. Se hai dati di 0x65 0x66 0x67 0x68 , per invertire otterrai 0x68 0x67 0x66 0x65 . Se guardi questi dati in termini di caratteri, in origine avresti A B C D , ma ora hai D C B A .

Torna a un flusso di byte: è solo una sequenza di dati. Devi sapere cosa rappresenta il dato per poterlo utilizzare. Se stiamo leggendo un file di testo, il flusso di byte che otterresti quando stai leggendo il file sarebbe solo un personaggio di qualche tipo. Un file eseguibile contiene un gruppo di caratteri non stampabili, motivo per cui sarebbe chiamato un file binario . Chiaramente, è possibile aprire un file eseguibile in un editor di testo, ma non fa nulla di utile.

    
risposta data 05.11.2013 - 18:23
fonte
2

Un flusso di byte è una sequenza ordinata di byte. C'è un primo byte, che non ha un predecessore. Il suo successore è il secondo byte e così via. Al giorno d'oggi, un byte è ampiamente compreso in otto bit. Se vogliamo essere più precisi, usiamo il termine octet stream e octet . Esistono ancora computer con byte non larghi otto bit.

Esadecimale è un modo di scrivere numeri e funge da rappresentazione stampata per i dati binari. Esadecimale è in realtà testo. Ad esempio, il valore esadecimale FE potrebbe rappresentare un byte: i bit 11111110 che hanno il valore decimale 255 . Tuttavia FE è in realtà una stringa di caratteri composta dai caratteri F e E , che richiede due byte nel set di caratteri US-ASCII o ISO-646! Questi due byte sono ciò che FE è e il singolo byte con valore 254 è ciò che FE rappresenta , come notazione stampata.

Se un canale di comunicazione o un handle di file o un dispositivo di questo tipo viene descritto come contenente un flusso di byte e non vengono fornite altre informazioni, quasi sicuramente not significa che i byte sono rappresentati come testo esadecimale , così che ogni byte astratto nello stream richiede due byte fisici.

E i dati grezzi significano semplicemente bit che non sono interpretati per avere una struttura che va oltre la semplice "matrice di bit". I dati grezzi di solito hanno una struttura e rappresentano qualcosa, ma quando li consideriamo come dati grezzi, ignoriamo l'interpretazione per il momento (ad esempio, stiamo osservando la rappresentazione grezza di un tipo di dati per verificarne la correttezza al dettaglio a livello di bit), o l'interpretazione non è disponibile (abbiamo alcuni dati, ma non capiamo la struttura dei dati e ciò che rappresenta).

    
risposta data 05.11.2013 - 23:47
fonte
0

Un byte è 8 bit. Un bit è 0 o 1. I "dati grezzi" sono solo un flusso di un byte dopo l'altro. Un flusso di byte può provenire da un file, una connessione di rete, un oggetto serializzato, un generatore di numeri casuali, ecc.

  • Esistono diversi modi per visualizzare un byte: binario (01110110), hex = esadecimale (7C), ottale (0271) o decimale (215). In tutti i casi, il valore massimo è 255 (base 10).

  • A volte i byte sono assegnati ai caratteri, come ascii. Digitate "ascii" su una riga di comando di Unix e otterrete una grande tabella che mappa le valli di byte 0-255 o (0-FF hex) al carattere associato. Ad esempio, lo spazio è x20 e "A" è x40. Si noti che alcuni valori di byte vengono mappati per controllare i caratteri e non sono stampabili. Ma i byte stessi non sono personaggi - sono solo un fascio di bit. Un numero.

  • "reverse 4 bytes" sarebbe prendere alcuni byte 123 42 231 0 e capovolgere l'ordine - 0 231 42 123. Applicato a un byte di vapore, probabilmente avrei letto 4 byte, invertirli, leggere i prossimi 4 byte, ecc.

(A proposito di questo problema è rilevante, perché se vuoi rappresentare un numero maggiore di 255 come bye, devi usare più di un byte.) Ma la domanda è, il byte "più grande" viene prima o l'ultimo "Si chiama big endian o little endian - guarda quelli per avere più background sul perché è utile mischiare i byte in un flusso di byte grezzo.)

    
risposta data 17.02.2014 - 07:50
fonte

Leggi altre domande sui tag