Pergunta

Eu estava tendo uma olhada este tutorial em Sun na linha de comando I / O. Ele afirmou que:

Você pode esperar que os fluxos padrão para ser fluxos de caracteres, mas, por razões históricas, eles são byte riachos. System.out e System.err são definido como objectos PrintStream. Embora seja tecnicamente um byte corrente, utiliza um PrintStream interna objeto de fluxo personagem emular muitas das características de fluxos de caracteres.

Será que qualquer um sabe o que "as razões históricas" são?

Foi útil?

Solução

As "razões históricas" são que os fluxos de caracteres não existia no Java 1.0. Aparentemente Sun percebeu que o modelo de tradução personagem era insuficiente e o carácter orientado leitor / gravador de hierarquia de classes foi adicionado no Java 1.1.

Mas era tarde demais para System.out e amigos.

Outras dicas

eu suporia que a razão pela qual é para ser retro-compatível com POSIX C / C ++ padrão de E / S, em que stdin, stdout, e stderr (C / C ++ equivalente de System.in, System.out, e sistema err respectivamente) são fluxos de bytes. No Windows, os fluxos de realizar a tradução CRLF, mas em sistemas POSIX, há tais conversões ocorrer, e você pode ler livremente e dados binários de gravação que não são caracteres. Lotes de utilitários Unix fazer isso, como gzip e tar do GNU.

Lembre-se que os caracteres em Java usar um caractere Unicode de 16 bits. O System.in originais etc necessário para ser compatível com os ambientes que apoiaram Java, que (na época no Dawn of Time), muitas vezes fez não suporte a Unicode. Isso, junto com o tratamento irritantemente díspar de extremidades de linha, significa que fluxos de bytes eram o único tipo que teve a mesma semântica, não importa em que plataforma.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top