2013-02-26 14 views
8

Il titolo è piuttosto auto-esplicativo. In molti javadoc JRE vedo le frasi "flusso di byte" e "flusso di caratteri" dappertutto.Java: flusso di byte rispetto al flusso di caratteri?

Ma non sono la stessa cosa? O sono leggermente diversi (ad esempio interpretati in modo diverso) in Java-land? Grazie in anticipo.

risposta

15

In Java, un byte non è la stessa cosa di char. Pertanto un flusso di byte è diverso da un flusso di caratteri. I byte sono destinati a dati binari arbitrari; i caratteri sono specifici per i dati che rappresentano i blocchi costitutivi delle stringhe.

ma se un char è solo 1 byte di larghezza

Solo che non lo è. Come per the JLS §4.2.1 un char è un numero compreso tra:

da '\u0000' a '\uffff' inclusiva, cioè, da 0 a 65535

Ma un byte è un numero compreso tra

da -128 a 127, compreso

+1

Grazie a @Matt Ball - Capisco che sono diversi per quanto riguarda i tipi ('byte',' char', ecc.), Ma se un 'char' ha solo 1 byte di larghezza, allora cosa c'è di diverso nell'archiviazione di un input stream come array di byte e array di caratteri? Questo era alla base della mia domanda. – IAmYourFaja

+4

Chi dice che 'char' ha una larghezza di 1 byte? http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html –

4

Sono diversi. Character e char sono tipi di dati a 2 byte in Java. Byte e byte sono tipi di dati a 1 byte.

Modifica: char è anche un tipo senza segno, mentre non lo è byte.

3

Il flusso di byte è solo un byte normale, ad esempio come lo vedresti quando apri un file in HEX Editor.

Il carattere è diverso dal semplice byte normale. La codifica ASCII utilizza esattamente 1 byte per carattere, ma questo non è vero per molte altre codifiche. Ad esempio, UTF-8 encoding può utilizzare da 1 a 6 byte per codificare un singolo carattere. Stream of character è progettato per astrarre la codifica sottostante e produrre char di un tipo di codifica (in Java, char e String utilizza la codifica UTF-16).

Come regola empirica:

  • Quando hai a che fare con il testo, è necessario utilizzare flusso di carattere per decodificare il byte nel personaggio con la codifica appropriata.

  • Quando si ha a che fare con dati binari o misti di binari e testo, è necessario utilizzare il flusso di byte, poiché altrimenti non ha senso. Se una sequenza di byte rappresenta una stringa in determinate codifiche, è sempre possibile selezionare quei byte e utilizzare il costruttore String(byte[] bytes, Charset charset) per recuperare la stringa.

0

In genere è meglio parlare di flussi in termini di dimensioni, piuttosto che di quello che trasportano. Lo streaming di byte è più intuitivo rispetto ai flussi di caratteri, poiché gli stream di caratteri ci fanno dover ricontrollare che un char è effettivamente un byte, non un char unicode o qualcosa di elaborato.

Un carattere è una rappresentazione, che può essere rappresentata da un byte, ma un byte sarà sempre un byte. Tutto il mondo brucerà quando i byte smetteranno di essere 8 bit.

+0

_ "Tutto il mondo brucerà quando i byte smetteranno di essere 8 bit." _ Difficilmente. http://en.wikipedia.org/wiki/Byte#History –

+0

http://stackoverflow.com/questions/13615764/is-a-byte-always-8-bits – Dmitry

Problemi correlati