IO Stream
En Java, las transmisiones IO se dividen en dos tipos: transmisiones de bytes y transmisiones de caracteres. Como su nombre indica, las transmisiones de bytes se leen y escriben de acuerdo con bytes, y se accede a los personajes de acuerdo con los personajes; La lectura de archivos de uso común es la transmisión de caracteres, y las transmisiones de bytes se utilizan en la comunicación de red.
La siguiente figura es el marco general de las transmisiones IO en Java:
Transmisión de bytes
En Java, las corrientes de byte generalmente terminan con transmisiones. La transmisión de byte de entrada se llama InputStream, y la transmisión de byte de salida se llama OutputStream; InputStream y OutputStream son superclase que representan todas las clases de su entrada/salida, y son clases abstractas (resumen)
Las transmisiones de byte de uso común son:
1.FileInputStream/FileOutputStream2.BufferedInputStream/BufferedOutputStream3.SequenceInputStream (secuencia de secuencia) 4.ObjectInputStream/ObjectOutputStream (transmisión de objeto y flujo de salida) 5.PrintStream (flujo de impresión)
Transmisión de carácter
En Java, la secuencia de caracteres de entrada termina con el lector, y la secuencia de caracteres de salida termina con el escritor. Por ejemplo, nuestro FileReader y FileWriter común son transmisiones de caracteres, y el lector y el ingenio son superclase de transmisiones de caracteres de entrada/salida, y también son clases abstractas.
Las transmisiones de personajes de uso común son:
1.Filereader/FileWriter2.BufferedReader/BufferedWriter3.InputStremReader/OutpleStreamWriter (Convertir Stream)
Convertir flujo
Un flujo de conversión es una clase que convierte una corriente de byte en una secuencia de caracteres, y hay dos tipos:
・ InputStreamReader ・ OutputStreamWriter
InputStreamReader es una secuencia de caracteres (lector), que requiere envolver una secuencia de byte (inputStream);
OutputStreamWriter es una secuencia de caracteres (escritor) y necesita envolver una secuencia de byte (outputStream)
Decorar
El propósito del embalaje es agregar nuevas funciones sobre la base del objeto original. Por ejemplo, el BufferedReader envuelve a un lector, que en realidad es una mejora de la función del lector; El lector original solo puede ser leído mediante un carácter y un personaje, y el BufferedReader formado después del empaque tiene una nueva función: la función de leer directamente una línea (línea de lectura). Hablando intuitivamente, este es el llamado Decor.
En términos de modo de diseño, este es un modo decorativo típico, y sus características son:
1. Los objetos decorativos y los objetos reales tienen la misma interfaz. De esta manera, el objeto del cliente puede interactuar con el objeto decorativo de la misma manera que el objeto real. 2. El objeto decorativo puede agregar algunas funciones adicionales antes o después de reenviar estas solicitudes. Esto asegura que durante el tiempo de ejecución, se puedan agregar funciones adicionales externamente sin modificar la estructura del objeto dado.
Correspondiente a nosotros es que BufferedReader y Reader son ambos lectores. Después del embalaje, la función BufferedReader se mejora, pero aún se puede usar como lectores (la referencia de la clase principal de OO puede apuntar a las subclases)
ejemplo
Ejemplo de transmisión de bytes
Corta el archivo mp3 en múltiples copias y lo recombina
paquete cn.xdian.test; import java.io.file; import java.io.fileInputStream; import java.io.fileOutputStream; import java.io.ioException; import java.io.sequenceInputStream; import java.util.enumeration; import java.util.vector; public class dMo2 {public statics; lanza IOException {CutFile (); // CORT MP3 File MergeFlile (); // Merge MP3 Archivos} // fusionar mp3public static void mergeFlile () lanza ioexception {file dir = new file ("/home/gavinzhou/music_test"); // Encuentra todos los archivos mp3 en la carpeta vector <fileinput -vector> vector = new vector = nuevo Vector <fileInputStream> (); file [] files = dir.listFiles (); para (archivo archivo: archivos) {if (file.getName (). endswith (". mp3")) {vector.add (nuevo fileInputStream (file);}} // Obtener el iterador a través de la enumeración de vector <fileInputStream> e = vector.elements (); // Crear una secuencia secuencia secuente Enumeration = new SequenceInseNEnputInputInputEnputEnputEnputEnputEnputEnputEnputEnputEnputEin; FileoutputStream fileOutputStream = nuevo fileOutputStream ("/home/gavinzhou/conbine.mp3"); // lea el archivo mp3 dividido byte [] buf = new byte [1024]; int long = 0; while ((longitud = inputStream.read (buf)! =-1) {fileOutStream.write (buf, 0, longitud);} fileoutputputstream.close (); inputStream.Close ();} // CORT mp3Public static void CutFile () lanza ioexception {archivo file = new file ("/home/gavinzhou/test.mp3"); file dir = new file ("/home/gavinzhou/music_test"); // inte stream stream fileininsam (" FileInputStream (file); // lea el archivo byte [] buf = new Byte [1024*1024]; int long = 0; for (int i = 0; (longitud = fileInputStream.read (buf))! =-1; i ++) {fileOutputStreamStreamStream = new FileStream (newEn Archivo (dir, "parte"+i+". Mp3")); fileoutputstream.write (buf, 0, longitud); fileoutputstream.close ();} // Cierre el flujo fileinputstream.close ();}}Ejemplo de transmisión de personajes
Copiar el archivo A al archivo B
paquete cn.xidian.test; import java.io.bufferedReader; import java.io.bufferedwriter; import java.io.file; import java.io.filereader; import java.io.filewriter; import java.io.ioxception; public class delo1 {public void mainer (string [] shole) sholes iarsception. Archivo ("/home/gavinzhou/a.txt"); archivo desfile = nuevo archivo ("/home/gavinzhou/b.txt"); // Cree la transmisión de entrada de entrada de entrada Buffederer input = new BufferedReader (new FileReader (SourceFile)); // Crea la salida de transmisión Buffered Writer = New BufferedWriter (New FileWriter (desfile); /// nulo; while ((line = input.readline ())! = null) {output.write (línea); output.newline ();} // Cierre la transmisión de entrada y salida input.close (); output.close ();}}Ejemplo de transmisión de impresión
paquete cn.xidian.test; import java.io.file; import java.io.fileOutputStream; import java.io.ioException; import java.io.printstream;/*La transmisión de impresión puede imprimir cualquier tipo de datos. Before printing the data, the data will be converted into a string and then printed*/class Animal{String name;String color;public Animal(String name,String color){this.name = name;this.color = color;}@Override public String toString() {return "Name:"+this.name+ " Color:"+ this.color;}}public class Demo6 {public static void main(String[] Args) lanza IOException {/* archivo de archivo = nuevo archivo ("/home/gavinzhou/a.txt"); // crear una transmisión impresa printstream printStream = new printStream (archivo); // Imprima cualquier información en el archivo printStream.println (97); printstream.println (3.14); printstream.println ('a'); printstream.println (true); Animal a = nuevo animal ("rata", "negro"); printStream.println (a); // Cambiar el sistema de entrada y salida estándar.setOut (printStream); // La salida estándar es para la pantalla System.out.println ("Test ..."); */// recopilación de información de registro de excepción. File logFile = new File ("/home/gavinzhou/test.log"); printstream logprintStream = new printStream (new FileOutputStream (logFile, true)); try {int c = 4/0; // Crear una excepción System.out.Println ("c ="+c); int [] arruLe; system.println (arr.ll long (excepción (excepción (excepción de excepción (excepción (excepción de excepción (excepción (excepción de excepción (excepción de excepción (excepción (excepción de excepción (excepción (excepción de excepción (excepción (excepción de excepción (excepción (excepción (excepción); e) {E.PrintStackTrace (logPrintStream); // Salida a archivo en lugar de en la pantalla}}}}Resumir
Lo anterior se trata de análisis de flujo de IO y ejemplos de código en Java. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a este sitio:
Exploración de Java: ejemplos de código encriptados y descifrados de archivos de hilo+io
Análisis de código de conocimiento relacionado con Java IO Stream
Interpretación detallada de Java IO Stream
Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!