1. Tres métodos de clasificación de flujos IO
1. Según la dirección del flujo, se divide en: flujo de entrada y flujo de salida
2 Según los datos del flujo Las unidades se dividen en: flujo de bytes y flujo de caracteres
3. Según las diferentes funciones del flujo, se divide en: flujo de nodos y flujo de procesamiento
2. Las cuatro clases abstractas de flujo IO:
Flujo de caracteres: Reader Writer
Flujo de bytes: InputStream (leer datos)
OutputStream ( escribir datos)
3. Métodos básicos de InputStream
int read() lanza IOException Lee un byte y lo devuelve como un número entero, si el retorno -1 ha llegado al final del flujo de entrada
void close() lanza IOException Close Stream libera recursos de memoria
long skip (long n) lanza IOException Salta n bytes sin leer
4. Métodos básicos de OutputStream
void write( int b) lanza IOException Escribe un byte de datos en el flujo de salida
void Flush() lanza IOException Escribe todos los datos almacenados en el buffer en el flujo de salida en destino
5. Escritor El método básico
escritura nula (int c) lanza IOException escribe un dato de carácter en el flujo de salida
escritura nula (String str) lanza IOException escribe un carácter en una cadena en el flujo de salida
void write(String str, int offset, int length)
Escribe caracteres de longitud de una cadena comenzando desde el desplazamiento hasta la salida stream
void Flush() lanza IOException
Escribe todos los datos almacenados en el buffer en el flujo de salida al destino
6. Métodos básicos de Reader
int read () lanza IOException Lee un carácter y lo devuelve en forma de un número entero. Si se devuelve -1, ha llegado al final del flujo de entrada
7. Tipo de flujo de nodo<. /p>
8. FileInputStream y FileOutputStream para acceder a archivos. Heredar la clase base se usa para ingresar y generar bytes en archivos.
9. FileReader y FileWriter para acceder a archivos heredan la clase base y se usan para caracteres de entrada y salida en archivos
----Salida El segundo parámetro del constructor de la secuencia se puede establecer en verdadero, lo que significa que se ingresará después del archivo existente
----Este tipo de flujo generará FileNotFoundException y debe mostrarse y capturarse
10. Flujo almacenado en búfer: el flujo almacenado en búfer debe conectarse al flujo de nodo correspondiente, lo que mejora la eficiencia de lectura y escritura. .
El método de construcción de este flujo de procesamiento debe pasar el tipo de clase base correspondiente
BufferedReader: proporciona el método readLine para que las universidades lean una línea de cadena
BufferedWriter : Proporciona una nueva línea para escribir un separador de línea, que es una nueva línea
BufferedInputStream no es de mucha utilidad
BufferedOutputStream no es de mucha utilidad
11. Convertir flujo : Se utiliza principalmente para convertir un flujo de bytes en un flujo de caracteres. ¡Más útil!
El flujo de conversión puede especificar su conjunto de codificación al construir
InputStreamReader debe estar conectado con InputStream
OutputStreamWriter debe estar conectado con OutputStream
Ejemplo: OutputStreamWriter osw = new OutputStreamWriter (new FileOutputStream (ruta del archivo);
Ejemplo de método: osw.getEncoding(); Obtener el método de codificación de la secuencia
12. Datos flujo y caracteres Flujo de matriz de sección:
El flujo de datos se utiliza principalmente para acceder a tipos de datos primitivos de Java, como largos y booleanos
El flujo de datos es un flujo de bytes
DataInputStream requiere un socket InputStream
DataOutputStream necesita estar conectado con OutputStream
Método DataInputStream: readBoolean() readInt() read……()……
readUTF(): Los métodos comúnmente utilizados para la transmisión de red son leer una cadena Unicode
El método DataOutputStream y DataInputStream corresponden básicamente al método de escritura
//Este constructor ya puede ingresar contenido en una matriz de bytes
ByteArrayOutputStream baos = new ByteArrayOutputStream ();
//Este método devuelve una matriz de bytes para obtener una matriz de bytes
baos.toByteArray ();
//Este método obtiene cuántos bytes ocupa la matriz de bytes
nuevo ByteArrayInputStream (una matriz de bytes).
disponible()
1ByteArrayOutputStream baos =
2 nuevos ByteArrayOutputStream();
3 DataOutputStream dos =
4 nuevos DataOutputStream(baos) ;
5 prueba {
6 dos.writeDouble(Math.random());
7 dos.writeBoolean(true);
8 ByteArrayInputStream bais =
9 nuevo ByteArrayInputStream(baos.toByteArray());
10 System.out.println(bais.available());
11 DataInputStream dis = new DataInputStream(bais);
12 System.out.println(dis.readDouble());
13 System.out.println(dis.readBoolean ());
14 dos.close(); dis.close();
15 } captura (IOException e) {
16 e.printStackTrace ();
17 }
12. Flujo de impresión
El flujo de impresión solo tiene un flujo de salida pero no un flujo de entrada, respectivamente, bytes de caracteres de destino. p> p>
Las dos clases proporcionan métodos Print y Println sobrecargados para la salida de múltiples tipos de datos
Las operaciones de salida de PrintWriter y PrintStream no generarán excepciones
PrintWriter y PrintStream tiene función de descarga automática
----System.setOut (recibe la clase OutputStream): se utiliza para configurar el flujo de salida predeterminado del sistema
12. Flujo de objetos
Equivalente a la serialización de C#, escriba o lea el objeto directamente
La palabra clave transitoria significa no serializar esta variable miembro
La clase que necesita ser serializada debe implementar una interfaz serializable
Métodos principales: writeObject(Object); readObject();
La lectura del tipo de objeto requiere conversión forzada del tipo de datos
1 import java.io *;
<. p> 23 clase pública TestObjectIO {
4 public static void main(String args[]) lanza una excepción {
5 T t = n
ew T();
6 t.k = 8;
7 FileOutputStream fos = new FileOutputStream("d:/share/java/io/testobjectio.dat");
8 ObjectOutputStream oos = nuevo ObjectOutputStream(fos);
9 oos.writeObject(t);
10 oos.flush(); 11 oos.close();
12
13 FileInputStream fis = new FileInputStream("d:/share/java/io/testobjectio.dat"); p>14 ObjectInputStream ois = new ObjectInputStream(fis);
15 T tReaded = (T)ois.readObject();
16 System.out.println(tReaded.i " " tReaded.j " " tReaded.d " " tReaded.k);
17
18 }
19 }
20
21 clase T
22 implementos Serializable
23 {
24 int i = 10
25; int j = 9;
26 doble d = 2,3;
27 transitorio int k = 15
28 }