Java flux E / S; quelles sont les différences?
Question
java.io
a beaucoup de différents rel="noreferrer"> flux, (FileInputStream, FileOutputStream, FileReader, FileWriter, BufferedStreams etc ...) et je suis confus pour déterminer les différences entre eux. Quels sont quelques exemples où un type de flux est préféré à un autre, et quelles sont les différences réelles entre eux?
La solution
Ceci est un grand sujet! Je recommande que vous commencez par lire I / O Streams :
Une I / O représente un flux d'entrée la source ou une destination de sortie. UNE flux peut représenter beaucoup de différents types de sources et destinations, y compris les fichiers de disque, périphériques, autres programmes et réseaux de mémoire.
Prise en charge de nombreux types différents cours d'eau des données, y compris les octets simples, les types de données primitives, localisées des personnages et des objets. certains cours d'eau simplement transmettre des données; autres manipulent et transformer les données de manière utile.
Autres conseils
Flux: un octet à la fois. Bon pour les données binaires.
Lecteurs / Writers: un caractère à la fois. Bon pour les données texte.
Anything "Buffered": nombre d'octets / caractères à la fois. Bonne presque tout le temps.
Lors de l'apprentissage Java J'ai fait ce schéma mental à propos java.io:
Flux
- octet courant orienté (8 bits)
- bon pour les données binaires comme un fichier Java
- bon pour les données "axées sur la machine"
Les lecteurs / écrivains
- char (UTF-16) orienté flux (16 bits)
- bon pour le texte, comme une source Java
- bon pour les données "axées sur l'homme"
Buffered
- toujours utile, sauf preuve du contraire
Séparer chaque nom en mots:. Chaque capital est un autre mot
- Fichier d'entrée flux est d'obtenir Entrée Fichier en utilisant Flux .
- Flux de sortie du fichier est d'écrire Sortie Fichier en utilisant Flux
Et ainsi de suite et ainsi de suite
mmyers écrit:
Streams:. Un octet à la fois
Lecteurs / Writers:. Un caractère à la fois
* Buffered: nombre d'octets. / Caractères à la fois
J'ai aussi trouvé cette java_tip_how_read_files_quickly
Très utile! Il indique les cours d'eau sont les plus efficaces.
Les spécialisations que vous mentionnez sont des types spécifiques utilisés pour fournir une interface standard à une variété de sources de données. Par exemple, un FileInputStream et un ObjectInputStream sera à la fois mettre en œuvre l'interface InputStream, mais fonctionneront sur des fichiers et des objets respectivement.
Ceci est probablement la vue d'ensemble la plus complète des différents cours d'eau, du lecteur et écrivain de l'API Java IO:
http://tutorials.jenkov.com/java-io/overview.html
Il fait partie d'un tutoriel Java IO plus couvrant les flux à base octets et CARACTÈRE.
Il couvre également les cours d'eau qui sont utilisés pour la lecture et l'écriture des données numériques brutes, comme celle du flotteur de int, etc.
Il couvre également les cours d'eau utilisés pour l'analyse syntaxique comme le PushbackInputStream et le PushbackReader.
flux d'octets sont la plupart du temps et largement utilisé type de flux en Java 1.0 pour le caractère et par octet. Après java 1.0 il a été dépréciée et flux de caractères joue un rôle important. ie., par exemple
BufferedReader obtiendra le caractère de la source, et son constructeur ressemble BufferedReader (lecteur inputReader) ..
Ici Reader est une classe abstraite et une fois de ses classes concrètes sont InputStreamReader, qui convertit les octets en caractères et prendre les entrées du clavier (System.in) ...
BufferedReader: Contient la mémoire tampon interne qui va lire les caractères du flux. compteur interne conserve la trace de caractère suivant à fournir au tampon à travers lecture (). InputStreamReader prend volonté entrée en octets et convertit en interne en caractères.
Java entrée et de sortie est définie en termes d'un concept abstrait appelé « courant », qui est une séquence de données. Il existe 2 types de cours d'eau.
- flux d'octets (8 octets de bits) → Résumé Les classes sont: InputStream et OutputStream
- flux de caractères (16 bits UNICODE) → Abstract classes sont: Reader et Writer
* java.io. classes utilisent le modèle de conception de décorateur. Le modèle de conception de décorateur attache responsabilités à l'égard des objets à l'exécution. Décorateurs sont plus souples que l'héritage parce que l'héritage attache la responsabilité des classes au moment de la compilation. Les java.io. * classes utilisent le modèle de décorateur pour construire différentes combinaisons de comportement lors de l'exécution sur la base des cours de base. href="https://i.stack.imgur.com/7iEl4.png" rel="nofollow noreferrer">
du livre Java / J2EE Companion entrevue d'emploi K.Arulkumaran & A.Sivayini