2017-08-14 2 views
0

si la méthode de lecture lit un octet de données du flux d'entrée, lorsqu'il doit lire un caractère, est-il lu deux fois octet par octet? comme un char est de 2 byes?Est-ce que Java.io.InputStream.read() Méthode lit chaque type de données comme octet?

+0

pourquoi utilisez-vous pas readChar dans la classe DataInputStream? – tommybee

+0

Toutes les données sont des octets, et 'read()' renvoie un seul octet. – Kayaman

+0

Il * n'a pas * à "lire un" char ". Il est spécifié de lire les octets, et c'est ce qu'il fait. Votre question n'a pas de sens. – EJP

Répondre

1

InputStream fonctionne sur des octets. C'est l'abstraction d'E/S sous-jacente en Java. Il peut lire un seul octet ou une séquence d'octets, en fonction des demandes de l'appelant. Mais il ne sait rien sur les caractères, donc il ne peut pas, à lui seul, décider de lire deux octets pour un personnage. Un Reader devrait le demander.

Si vous devez lire des caractères, utilisez Reader pour les lire depuis InputStream.

(De même, pour lire des objets Java sérialisés, vous pouvez utiliser ObjectInputStream, qui les lit à nouveau de la InputStream. Vous pouvez aussi utiliser Scanner pour lire une variété d'entrées de numéros en texte, encore une fois d'un InputStream.)

Le but de cette abstraction est la séparation des responsabilités -

  • Le InputStream fournit un flux d'octets et gère toute logique (lecture de fichiers/réseau/...) sous-jacent.
  • Le Reader convertit le flux d'octets en flux de caractères et ne se soucie pas de l'origine des données.