Java: InputStream. Flux d'entrée
Java, comme beaucoup de langues modernesprogrammation, prend en charge la mise en œuvre des flux d'entrée de données. En Java, InputStream est la classe de base pour les flux d'octets. Cette classe est abstraite, c'est-à-dire que dans le processus du programme nous ne pouvons pas créer son instance. Cependant, dans le package io, de nombreuses classes héritent et étendent les fonctionnalités de InputStream. Pour utiliser cette classe dans votre code, vous devez l'importer depuis le package java.io.InputStream. Ensuite, nous verrons la fonctionnalité de base fournie par la classe InputStream, ainsi que les classes principales qui l'implémentent.
Méthodes pour la classe InputStream
Avant de procéder à une étude détailléeles méthodes de classe InputStream, il faut mentionner qu'il implémente des interfaces Refermable et AutoCloseable. L'interface Closeable nous dit que lors de la fermeture du thread, il doit être fermé. Ceci est fait en utilisant la méthode close (). Comme la plupart des méthodes de classe InputStream en cas d'erreur génère un type d'exception IOException, toutes les opérations nécessaires à la réalisation d'un bloc d'essai et une méthode close () enfin faire une unité pour qu'elle se déclenche en fonction du résultat de l'opération pour essayer de corps.
L'interface AutoCloseable réduit considérablementla quantité de code technique, car elle permet à la méthode close () de fonctionner automatiquement et de ne pas ajouter un bloc finally à votre code. Si vous utilisez la version septième ou ultérieure de Java, un InputStream peut être placé dans ce qu'on appelle essayer avec les ressources dont toutes les opérations de fermer le flux prend le relais.
Considérez les méthodes principales de la classe InputStream:
- int available () - Retourne le nombre d'octets disponibles pour la lecture;
- int read () - extrait de la ressource l'octet courant et le renvoie dans la représentation entière; si tous les octets sont lus, renvoie -1;
- int read (octet [] buffer) - Lit les octets disponibles danstampon spécifié en tant que tableau d'octets de type (le nombre d'octets lus est égal à la taille du tampon spécifié, renvoie le nombre d'octets lus, si -1 tous les octets disponibles sont renvoyés);
- int read (octet [] tampon, int offset, intle nombre d'octets) - Surcharge la méthode précédente fait la même chose, mais avec spécifié dans le « décalage » position et lu autant est donné dans le « nombre d'octets »;
- saut long (nombre d'octets long) - ignore le nombre d'octets spécifié et renvoie le nombre réel d'octets.
InputStream est implémenté par plusieurs classes, conçues pour fonctionner avec différentes sources et types de données. L'arbre de l'héritage est présenté ci-dessous.
Lecture de fichiers
Flux d'octets pour lire des informations à partir de fichiersimplémenté par la classe FileInputStream. Pour ouvrir un fichier pour lire des octets, il suffit de créer une instance de cette classe, en passant le nom du fichier au constructeur en argument. Si le fichier avec le nom donné n'existe pas, une exception de type FileNotFoundException sera levée.
En cas d'ouverture réussie d'un fichier, travaillez avec lui en utilisant les méthodes décrites ci-dessus, puisque FileInputStream est le successeur de l'InputStream.
Lecture des types de données primitifs
L'exemple précédent a décrit le travail avecles valeurs d'octets qui peuvent être interprétées comme des symboles. Mais que se passe-t-il si nous avons besoin de lire une valeur entière, fractionnaire ou logique? Pour ce faire, Java InputStream est indirectement développé par la classe DataInputStream. Cette classe est l'encapsuleur de InputStream, qui lui est transmis lorsqu'il est créé en tant qu'argument du constructeur. Ce type de flux lit les données sous forme binaire.
DataInputStream implémente également l'interface DataInput et ses méthodes pour lire les types de données primitifs. Voici une liste de ces méthodes.
Les noms des méthodes parlent d'eux-mêmes - chacun d'eux est destiné à lire un certain type de données.
Flux d'entrée en mémoire tampon
Le flux de lecture de données mis en mémoire tampon est implémentéBufferedInputStream classe en Java. InputStream est enveloppé par cette classe. Cette classe complète le flux tampon, vous permettant de lire en même temps non pas un mais plusieurs octets. Cela permet d'améliorer sensiblement les performances de l'opération. BufferedInputStream descendant InputStream est indirecte et hérite donc toutes les méthodes mentionnées ci-dessus.
Cette classe a deux constructeurs:
- BufferedInputStream (flux d'entrée InputStream);
- BufferedInputStream (flux d'entrée InputStream, taille du tampon int)
De la signature des constructeurs, vous pouvez comprendre que le premier définit la taille de la mémoire tampon par défaut, et dans le second, il est possible de le définir manuellement.
Conclusion
Nous avons couvert l'implémentation de base de InputStream. Si vous avez besoin de convertir les octets reçus en une chaîne, alors Java InputStream to String (), malheureusement, n'est pas surchargé, donc pour cela vous devrez utiliser des utilitaires spéciaux, par exemple IOUtils de la bibliothèque Apache Commons.</ span> </ p>