Maison  >  Article  >  Java  >  Quelle est la différence entre les flux Java

Quelle est la différence entre les flux Java

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼original
2019-11-14 09:36:481821parcourir

Quelle est la différence entre les flux Java

Toutes les données du programme sont transmises ou enregistrées sous forme de flux. Lorsque le programme a besoin de données, il doit utiliser le flux d'entrée pour lire les données, et lorsque le programme en a besoin. data Lors de la sauvegarde, elle s'effectue à l'aide du flux de sortie.

Les entrées et sorties du programme sont enregistrées sous forme de flux, et ce qui est enregistré dans les flux sont en fait des fichiers d'octets.

Flux d'octets et flux de caractères

Il existe deux catégories principales de contenu de fichier d'exploitation dans le package java.io : le flux d'octets et le flux de caractères, tous deux divisés en opérations d’entrée et de sortie. La sortie des données dans un flux d'octets se fait principalement à l'aide de OutputStream, et la saisie se fait à l'aide d'InputStream. La sortie dans un flux de caractères se fait principalement à l'aide de la classe Writer et les flux d'entrée sont principalement effectués à l'aide de la classe Reader. (Ces quatre sont des classes abstraites)

Java fournit un package dédié aux fonctions d'entrée et de sortie, Java.io, comprenant :

InputStream, OutputStream, Reader, Writer

InputStream et OutputStream, tous deux sont conçus pour les flux d'octets et sont principalement utilisés pour traiter des octets ou des objets binaires.

Reader et Writer sont conçus pour les flux de caractères (un caractère occupe deux octets) et sont principalement utilisés pour traiter des caractères ou des chaînes.

L'unité de traitement du flux de caractères est un caractère Unicode de 2 octets, fonctionnant respectivement sur des caractères, des tableaux de caractères ou des chaînes, tandis que l'unité de traitement du flux d'octets est de 1 octet, fonctionnant sur des octets et des tableaux d'octets. Par conséquent, le flux de caractères est formé par la machine virtuelle Java convertissant les octets en caractères Unicode de 2 octets, ce qui lui permet de mieux prendre en charge plusieurs langues ! S'il s'agit de fichiers audio, d'images et de chansons, il est préférable d'utiliser des flux d'octets. S'il est lié au chinois (texte), il est préférable d'utiliser des flux de caractères.

Tous les fichiers sont stockés en octets. Ce qui est retenu sur le disque, ce ne sont pas les caractères du fichier mais les caractères sont d'abord codés en octets puis ces octets sont stockés sur le disque. Lors de la lecture d'un fichier (notamment d'un fichier texte), celui-ci est également lu octet par octet pour former une séquence d'octets.

Le flux d'octets peut être utilisé pour tout type d'objet, y compris les objets binaires, tandis que le flux de caractères ne peut traiter que des caractères ou des chaînes ; 2. Le flux d'octets fournit la fonction de traiter tout type d'opération d'E/S, mais il ne peut pas les gérer. Les caractères Unicode directement et les flux de caractères font exactement cela.

Le flux d'octets est le plus basique, toutes les sous-classes d'InputStrem et OutputStream le sont, principalement utilisées pour traiter des données binaires, elles sont traitées par octets, mais en réalité beaucoup de données sont du texte, et le concept de flux de caractères est proposé, qui est traité en fonction du codage de la machine virtuelle, c'est-à-dire que le jeu de caractères est converti. Les deux sont liés via InputStreamReader et OutputStreamWriter. En fait, ils sont liés via les problèmes de caractères chinois byte[] et String. qui surviennent au cours du développement sont en réalité causés par l'incohérence dans la conversion entre les flux de caractères et les flux d'octets.

Le type de retour de la méthode read() de la classe Reader est int : le caractère lu sous forme d'entier (représentant 16 bits sur deux octets), allant de 0 à 65535 (0x00-0xffff), si Lorsque la fin du flux est atteinte, -1 est renvoyé.

Bien que read() de inputStream renvoie également un int, puisque cette classe est orientée vers les flux d'octets et qu'un octet occupe 8 bits, elle renvoie une valeur d'octet int comprise entre 0 et 255. Si aucun octet n'est disponible car la fin du flux a été atteinte, la valeur -1 est renvoyée. Par conséquent, les valeurs qui ne peuvent pas être représentées par 0-255 doivent être lues à l'aide d'un flux de caractères ! Par exemple, les caractères chinois.

Site Web php chinois, un grand nombre de Tutoriels d'introduction à Java gratuits, bienvenue pour apprendre en ligne !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Qu'est-ce que le GC de JavaArticle suivant:Qu'est-ce que le GC de Java