Domanda

Stavo dando un'occhiata a questo tutorial su Sun sulla riga di comando I / O. Ha dichiarato che:

  

Potresti aspettarti i flussi standard   essere flussi di personaggi, ma, per   ragioni storiche, sono byte   i flussi. System.out e System.err sono   definito come oggetti PrintStream.   Anche se tecnicamente è un byte   stream, PrintStream utilizza un   oggetto flusso di caratteri interno a   emulare molte delle funzionalità di   flussi di personaggi.

Qualcuno sa quali sono le "ragioni storiche" sono?

È stato utile?

Soluzione

Le "ragioni storiche" sono che i flussi di caratteri non esistevano in Java 1.0. Apparentemente Sun si è reso conto che il modello di traduzione dei personaggi era insufficiente e la gerarchia di classi Reader / Writer orientata ai personaggi è stata aggiunta in Java 1.1.

Ma era troppo tardi per System.out e gli amici.

Altri suggerimenti

Immagino che il motivo sia di essere retrocompatibile con l'I / O standard POSIX C / C ++, in cui stdin, stdout e stderr (l'equivalente C / C ++ di System.in, System.out e System .err rispettivamente) sono flussi di byte. In Windows, questi flussi eseguono la traduzione CRLF, ma nei sistemi POSIX non si verificano tali conversioni e puoi leggere e scrivere liberamente dati binari non di carattere. Molte utility Unix lo fanno, come gzip e tar di GNU.

Ricorda che i personaggi in Java usano un carattere Unicode a 16 bit. L'originale System.in etc doveva essere compatibile con gli ambienti che supportavano Java, che (all'epoca di Dawn of Time) spesso non supportava Unicode. Ciò, insieme al trattamento fastidiosamente disparato delle estremità delle linee, significava che i flussi di byte erano l'unico tipo che aveva la stessa semantica, indipendentemente dalla piattaforma.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top