Question

Quelle est la différence entre le lecteur et InputStream? Et quand utiliser quoi? Si je peux utiliser Reader pour lire les caractères pourquoi je vais utiliser InputStream, je suppose que lire des objets?

Était-ce utile?

La solution

Un InputStream est la méthode brute d'obtenir des informations à partir d'une ressource. Il saisit l'octet de données par octet sans effectuer tout type de traduction. Si vous lisez des données d'image, ou tout autre fichier binaire, c'est le flux d'utilisation.

Un lecteur est conçu pour les flux de caractères. Si les informations que vous lisez est tout le texte, le lecteur prendra soin du caractère de décodage pour vous et vous donner des caractères unicode à partir du flux d'entrée brut. Si vous lisez tout type de texte, c'est le cours d'eau à utiliser.

Vous pouvez envelopper un InputStream et la transformer en un lecteur en utilisant la classe InputStreamReader.

Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);

Autres conseils

InputStreams sont utilisés pour lire des octets d'un flux. Ils sont donc utiles pour les données binaires telles que des images, des vidéos et objets sérialisés.

Les lecteurs d'autre part sont des flux de caractère afin qu'ils soient mieux utilisés pour lire des données de caractères.

Je suppose que la source de confusion est que le rendement InputStream.read() un int et Reader.read() retourne également un int.

La différence est que les valeurs d'octets de retour de InputStream.read() entre 0 et 255 correspondant au contenu brutes du flux d'octets et Reader.read() renvoient la valeur de caractère qui est comprise entre 0 et 65357 (car il y a 65358 différents points de code Unicode)

Un InputStream vous permet de lire le contenu octet par octet, par exemple le contenu "a ‡ a" sont lus comme un flux de 5 octets, à savoir, 97, 226, 128, 161 et 97a -> U+0061 -> 0x61 -> 97 et ‡ -> U+2021 -> 0xE280A1 (utf-8 encoding of 0x2021) -> 226 128 161.

Un Reader vous permet de lire le caractère contenu par caractère si le contenu « a ‡ a » sont lus en 3 caractères 97, 8225 et 97a -> U+0061 -> 0x61 -> 97 et ‡ -> U+2021 -> 0x2021 -> 8225.

On accepte les octets et l'autre accepte les caractères.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top