Hvad er en byte stream egentlig?

Kan nogen forklare mig, hvad byte-stream faktisk indeholder? Indeholder den kun bytes (hex data) eller binære data eller engelske bogstaver? Jeg er også forvirret over udtrykket “rådata”. Hvis nogen bad mig om at “vende de 4 byte-data”, hvad skal jeg så antage, at dataene er hex-kode eller binær kode?

Kommentarer

  • Mine to cent er ikke svarværdige (og der er allerede gode nedenfor), men jeg vil bare give links til disse 2 artikler, som sandsynligvis vil give god indsigt i, hvordan ” rådata ” fortolkes til faktisk at betyde noget (det betyder ikke ‘ t noget, medmindre du ved, hvad det skal repræsentere, og hvordan det er kodet / gemt) betterexplained.com/articles/… joelonsoftware. com / articles / Unicode.html
  • Jeg tror, java oprettede byte for at undgå at bruge c / c ++ ‘ s char til ting, der kan ‘ t forstås som et tegn. char blev brugt meget i c / c ++, fordi størrelsen på char er 1 byte. Også enheder i unix er blok- og karakterenheder. Hvis du læser fra char-enheder, får du strøm af usignerede tegn / byte.
  • Byte-stream er tvetydig. Oktetstrøm er ikke.
  • Data kan fortolkes på mange niveauer. Nederst er det ‘ kun en række on-off elektriske niveauer. Lidt højere op ‘ er et stykke byte, eller som du siger, en byte stream . Endnu højere op begynder du at fortolke rådataene. Bytes kan tolkes som tekst på mange måder (kodninger). Heltal også (stort eller lille endian). Du kan endda gå højere op. Du har en zip-fil. Denne zip-fil er din sikkerhedskopi fra i går. Og så videre. Problemet er, at det nøjagtige niveau ofte er implicit og ikke gøres klart, og dette kan være forvirrende.

Svar

Byte-streams indeholder, ja, bytes. Opdelt i hvad det faktisk er, er det 8 bits sammensat af 1er og 0er. Hvis det repræsenterer et tal, ville det være et hvilket som helst tal fra 0 til 255 (hvilket, kan jeg tilføje, ikke er tilfældigt, hvorfor de 4 tal i en IP-adresse altid varierer fra 0 til 255). Byte streams er normalt sofistikerede grænseflader, der er beregnet til at skjule det underliggende grundlæggende byte-array, der bruges til at holde en cirkulær buffer (du fylder bufferen op og venter på, at nogen tømmer den, på hvilket tidspunkt den blot fylder bufferen op igen).

Hvad pokker repræsenterer det? Nå, det kan repræsentere en tekstfil eller et billede eller en live videostream. Hvad det er afhænger helt af sammenhængen med, hvem der læser det. Hex-repræsentation er en anden måde at sige det samme på, selvom det undertiden er mere bekvemt at administrere byte med hensyn til deres hex-repræsentation snarere end tal, men det er den samme ting.

Når du “henviser til rådata, henviser du normalt til byte-data. Dataene kommer uden et tag, der siger” Jeg er en billedfil! “Normalt beskæftiger du dig kun med rå data, når du ikke” er ligeglad med, hvad dataene repræsenterer generelt. For eksempel, hvis jeg ville konvertere et billede til dets sort / hvide version, kan jeg sige at læse et billeds rådata og for hver 3 byte, der læses (hvilket faktisk ville være repræsentation af rød farve, repræsentation af grøn farve og repræsentation af blå farve), tilføj dens talværdi og divider med 3, skriv derefter den værdi 3 gange. I det væsentlige er det, jeg ville gøre, at beregne et gennemsnit af en pixel med røde, grønne og blå værdier og gøre dens grå ækvivalente pixel ud fra den Men når du taler om at udføre operationer til data på niveauet “byte for byte”, er du ligeglad med det store billede, så at sige.

Eller måske vil du gemme en fil i en database, men den beder dig om at indsætte dens “rådata” i en blob-datatype. Dette betyder simpelthen at konvertere dataene i en fil til et stort byte-array, som databasen kan forstå og administrere. Du finder ud af, at når du henter denne værdi fra databasen, vil det simpelthen være et stort byte-array, som du oprindeligt leverede til databasen til at begynde med. Hvis disse data var en fil, skal du, programmøren, fortolke den byte igen. data som om du læste en fil en byte ad gangen.

Hvis nogen bad dig om at “vende de 4 byte data”, antager jeg, at det refererer til big-endian vs little-endian fortolkning af tal , der skriver tal, der starter med den mest eller mindst signifikante byte. Det betyder ikke noget, om et tal er repræsenteret som big-endian eller little-endian, bare at alle systemer, der læser nummeret, fortolker det konsekvent.

Dette er ikke at sige, at den faktiske talrepræsentation (eller hex-repræsentation for den sags skyld) ændres, simpelthen at rækkefølgen, som disse 4 bytes fremstiller et tal, skal vendes. Så sig, at du har 0x01, 0x02, 0x03 og 0x04.For at vende disse, skulle du “have 0x04, 0x03, 0x02, 0x01 i stedet. Systemet vil sandsynligvis læse disse 4 bytes i omvendt rækkefølge, og da du allerede har vendt det, fortolkes værdien til at være den samme som hvad der var beregnet i rådataene.

Jeg håber, det forklarer det!

Kommentarer

  • Alt er i orden ..! Kan du venligst uddybe svaret, der reagerer på ” rådata “?
  • @ user2720323 Okay, ændret for at forklare bedre ” rådata. ” 🙂
  • En ting at huske på … alle data er simpelthen en samling af bytes. Betydningen af disse bytes er defineret af en slags metadata (filtypenavn, databasefelt osv.). En billedfil kan fortolkes som en ASCII-fil og omvendt. Teksten eller billedet kan være meningsløst, men det er stadig muligt. (Derp … Jeg skulle have læst de næste svar)
  • @kevincline Prøv at forstå det faktum, at jeg ‘ prøver at formidle en idé. Min prioritet er ikke ‘ t at skrive en nøjagtig algoritme. Hvis du ville være mere præcis, vejer du ‘ de røde grønne og blå værdier efter hvad det menneskelige øje kan opfatte.

Svar

En byte er simpelthen en informationsenhed – det kan være hvad som helst. En byte i sig selv betyder ikke noget, du skal knytte en slags mening til den.

Så for at udvide det –

Indeholder den kun bytes (hex data) eller binære data eller engelske bogstaver?

Hex-data er de samme som binære data. Det ” s bare en anden måde at vise dataene på. For eksempel 0x41 = 0b01000001 = “A” = 65 (decimal). Engelske bogstaver ville bare være en delmængde af det.

Hvis nogen bad mig om at “vende de 4 byte data”, hvad skal jeg så antage, at dataene er hex-kode eller binær kode?

Da hex kun er en repræsentation af dataene, betyder det ikke noget, hvordan du tænker om det. Hvis du har data fra 0x65 0x66 0x67 0x68, hvis du vil vende det, får du 0x68 0x67 0x66 0x65. Hvis du kiggede på disse data med hensyn til tegn, du oprindeligt ville have A B C D, men nu har du D C B A.

Tilbage til en byte-stream – det “bare en sekvens af data. Du skal vide, hvad dataene repræsenterer for at kunne bruge dem. Hvis vi læser en tekstfil, vil den byte-strøm, du får, når du læser filen, være tegn af en slags. En eksekverbar fil ville have en masse ikke-udskrivbare tegn i sig, hvorfor det ville blive kaldt en binær fil. Det er klart, at det er muligt at åbne en eksekverbar fil i en teksteditor, men det gør ikke noget nyttigt.

Kommentarer

  • +1 men fremhævelsen af binær i lat bit virker forkert placeret. ” binære data ” indeholder ofte tegn, der ikke kan udskrives, men ‘ kaldes ” binært ” fordi det ‘ består af binære cifre, ikke fordi det indeholder tegn, der ikke kan udskrives . Jeg forstår, at du ‘ bruger ” binær ” i modsætning til ” tekst ” data, men jeg tror, det kan forvirre OP endnu længere.
  • Jeg har et spørgsmål angående tilbageførsel. Hvis jeg har et heltal (32 bit) 325487 i en fil, hvordan kan jeg så vende dette 4 byte heltal? ligeledes har jeg et ord (” hai hvordan har du det “), hvordan man vender denne streng ved at antage hvert tegn som en byte.
  • @ user2720323 int reverseX = ((x & 0xFF000000) >> 24) + ((x & 0x00FF0000) >> 8) + ((x & 0x0000FF00) << 8) + ((x & 0x000000FF) << 24); Dette tager bogstaveligt talt hver byte, skifter den i den rigtige position og kombineres med de andre.

Svar

En byte-stream er en ordnet rækkefølge af bytes. Der er en første byte, som ikke har nogen forgænger. Dens efterfølger er den anden byte og så videre. I dag forstås en byte bredt at bestå af otte bits. Hvis vi ønsker at være mere præcise, bruger vi udtrykket octet stream og octet . Der findes stadig computere med byte, der ikke er otte bits brede.

Hexadecimal er en måde at skrive tal på og fungerer som en udskrevet repræsentation for binære data. Hexadecimal er faktisk tekst F.eks. Kan den hexadecimale værdi FE muligvis repræsentere en byte: bitene 11111110 som har decimalværdien 255.FE er dog faktisk en tegnstreng bestående af tegnene F og E, hvilket kræver to bytes i tegnsættet US-ASCII eller ISO-646! Disse to byte er, hvad FE er , og den enkelte byte med værdien 254 er, hvad FE repræsenterer som en trykt notation.

Hvis en kommunikationskanal eller et filhåndtag eller en sådan enhed er beskrevet som bærer en byte-strøm, og ingen andre oplysninger gives, betyder det næsten helt sikkert ikke at bytes er repræsenteret som hexadecimal tekst , så hver abstrakt byte i strømmen kræver to fysiske byte.

Og rådata betyder simpelthen bits, som ikke fortolkes for at have nogen struktur ud over bare “matrix af bits”. Rå data har normalt en struktur og repræsenterer noget, men når vi ser på det som rådata, ignorerer vi enten fortolkningen for øjeblikket (for eksempel ser vi på den rå repræsentation af en datatype for at kontrollere dens korrekthed nede til bitniveau detaljer), eller fortolkningen er ikke tilgængelig (vi har nogle data, men vi forstår ikke datastrukturen og hvad de repræsenterer).

Kommentarer

  • PDP-10 havde instruktioner til at håndtere bytes af variabel størrelse. Den mest almindelige var syv bit ASCII efterfulgt af seks-bit tegn.

Svar

En byte er 8 bits. Lidt er 0 eller 1. De “rå data” er bare en strøm af den ene byte efter den anden. En byte-stream kan komme fra en fil, en netværksforbindelse, et serialiseret objekt, en tilfældig talgenerator osv.

  • Der er flere måder at vise en byte på: binær (01110110) , hex = hexidecimal (7C), oktal (0271) eller decimal (215). I alle tilfælde er den maksimale værdi 255 (base 10).

  • Nogle gange tildeles bytes til tegn som f.eks. Ascii. Skriv “ascii” på en unix-kommandolinje, og du får en stor tabel, der kortlægger byteværdierne 0-255 eller (0-FF hex) til det tilknyttede tegn. F.eks. Er mellemrum x20 og “A” er x40 Bemærk, at nogle byteværdier kortlægges for at kontrollere tegn og ikke kan udskrives. Men selve byte er ikke tegn – de er bare et bundt af bits. Et tal.

  • “reverse 4 bytes” ville være at tage nogle byte 123 42 231 0 og vende rækkefølgen – 0 231 42 123. Anvendt på en byte-damp, I “læste sandsynligvis 4 bytes, vend dem om, læs de næste 4 bytes osv.

(BTW er problemet relevant, for hvis du vil repræsentere et tal større end 255 som byes, skal du bruge mere end en byte. Men så er spørgsmålet, om den “største” byte kommer først eller sidst? Det kaldes stor endian eller lille endian – se dem op for mere baggrund om hvorfor det er nyttigt at blande rundt om byte i en rå byte-strøm.)

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *