1. ¿Qué es IO?
Las operaciones de E/S en Java se refieren principalmente al uso de Java para operaciones de entrada y salida. Todos los mecanismos de E/S de Java se basan en flujos de datos para entrada y salida. Estos flujos de datos representan la secuencia fluida de caracteres o datos de bytes. Los flujos de E/S de Java proporcionan métodos estándar para leer y escribir datos. Cualquier objeto en Java que represente una fuente de datos proporcionará métodos para leer y escribir sus datos en un flujo de datos.
Java.io es el paquete principal para la mayoría de las clases de entrada/salida orientadas al flujo de datos. Además, Java también proporciona soporte para la transmisión de bloques y el bloque IO se utiliza en la biblioteca central java.nio.
La ventaja de Stream IO es que es simple y fácil de usar, pero la desventaja es que es menos eficiente. Block IO es muy eficiente, pero la programación es más complicada.
Modelo de E/S de Java:
El diseño del modelo IO de Java es excelente. Utiliza el patrón Decorator para dividir Streams por función. Puede ensamblar dinámicamente estos Streams para obtener las funciones que necesita. Por ejemplo, si necesita un flujo de entrada de archivos almacenado en búfer, debe usar una combinación de FileInputStream y BufferedInputStream.
2. Conceptos básicos del flujo de datos.
El flujo de datos es una colección de datos continuos, al igual que el flujo de agua en una tubería de agua. El agua se suministra poco a poco en un extremo de la tubería de agua y lo que se ve en el otro extremo de la tubería de agua es un flujo continuo. de agua. El programa de escritura de datos puede escribir datos en la tubería de flujo de datos segmento por segmento. Estos segmentos de datos formarán un largo flujo de datos en secuencia. Para los programas de lectura de datos, la segmentación del flujo de datos durante la escritura no se puede ver cada vez, pero solo se pueden leer los datos anteriores y luego los datos posteriores. Independientemente de si los datos se escriben en varios lotes o en su conjunto a la vez, el efecto al leer es exactamente el mismo.
"Una secuencia es el origen o destino de los datos almacenados en un disco u otro dispositivo periférico".
Hay tres formas de almacenar datos en una computadora, una es almacenamiento externo, otra es memoria y la otra es caché. Por ejemplo, el disco duro, el disco magnético, la unidad flash USB, etc. de la computadora son todos almacenamiento externo. Hay una tarjeta de memoria en la computadora y el caché está en la CPU. El almacenamiento externo tiene la mayor capacidad de almacenamiento, seguido de la memoria y finalmente el caché. Sin embargo, la lectura de datos del almacenamiento externo es la más lenta, seguida de la memoria y el caché es la más rápida. A continuación se muestra un resumen de la lectura de datos de la memoria externa a la memoria y la escritura de datos de la memoria a la memoria externa. Para comprender la memoria y el almacenamiento externo, podemos entenderlo simplemente como un contenedor, es decir, el almacenamiento externo es un contenedor y la memoria es otro contenedor. Entonces, ¿cómo leer los datos del contenedor de almacenamiento externo en el contenedor de memoria y cómo guardar los datos del contenedor de memoria en el almacenamiento externo?
En la biblioteca de clases de Java, la parte IO es muy grande porque cubre una amplia gama de campos:
Entrada y salida estándar, operaciones de archivos, flujos de datos en la red, flujos de cadenas, flujos de objetos, flujos de archivos zip, etc. En Java, la abstracción de entrada y salida se llama flujo, que es como una tubería de agua que conecta dos contenedores. Leer datos de la memoria externa a la memoria se denomina flujo de entrada y escribir datos de la memoria a la memoria externa se denomina flujo de salida.
La secuencia es un concepto muy vívido. Cuando el programa necesita leer datos, abrirá una secuencia a la fuente de datos. Esta fuente de datos puede ser un archivo, una memoria o una conexión de red. De manera similar, cuando el programa necesite escribir datos, abrirá una secuencia hacia el destino.
Los conceptos básicos resumidos son los siguientes:
Una secuencia ordenada de bytes con un punto inicial y un punto final. Incluyendo flujo de entrada y flujo de salida.
2) Flujo de entrada:El programa lee la fuente de datos del flujo de entrada. Las fuentes de datos incluyen el mundo exterior (teclado, archivos, red...), que es el canal de comunicación que lee la fuente de datos en el programa.
El propósito de utilizar flujos de datos es hacer que la salida y la entrada sean independientes del dispositivo.
A Input Stream no le importa de qué dispositivo proviene la fuente de datos (teclado, archivo, red)
Al flujo de salida no le importa a qué dispositivo están destinados los datos (teclado, archivo, red)
3. E/S estándar
Los programas Java pueden intercambiar información breve con el mundo exterior a través de parámetros de línea de comando. Al mismo tiempo, también estipula cómo intercambiar información con dispositivos de entrada y salida estándar, como teclados y monitores. A través de archivos, se puede intercambiar información en cualquier formato con el mundo exterior.
1. Parámetros de la línea de comandoResultados de ejecución:
argumentos[0] es <Java>
argumentos[1] es <C>
argumentos[2] es <VB>
El flujo de datos estándar que viene con el sistema Java: java.lang.System:
Aviso:
(1) La clase Sistema no puede crear objetos y solo puede usar sus tres miembros estáticos directamente.
(2) Siempre que se ejecuta el método principal, los tres objetos anteriores se generan automáticamente.
1) Flujo de salida estándar System.out
System.out envía datos al dispositivo de salida estándar y su tipo de datos es PrintStream. método:
2) Flujo de entrada estándar System.in
System.in lee datos del dispositivo de entrada estándar (obtiene datos de la entrada estándar, generalmente el teclado) y su tipo de datos es InputStream. método:
3) Flujo de errores estándar
System.err genera un error estándar y su tipo de datos es PrintStream. Consulte la API para obtener instrucciones detalladas.
La salida estándar llama al método println a través de System.out para generar parámetros y ajustar nuevas líneas, mientras que el método print genera parámetros pero no ajusta nuevas líneas. El método println o print implementa múltiples métodos para generar tipos de datos básicos mediante sobrecarga, incluidos los tipos de parámetros de salida boolean, char, int, long, float y double. Al mismo tiempo, los métodos cuyos tipos de parámetros de salida son char[], String y Object también están sobrecargados. Entre ellos, los métodos print(Object) y println(Object) llamarán al método toString del parámetro Object en tiempo de ejecución.
clase pública StandardInputOutput {
público estático vacío principal (String args []) {
Cadena s;
//Crea un lector de buffer para leer datos línea por línea desde el teclado
InputStreamReader ir = nuevo InputStreamReader(System.in);
BufferedReader en = nuevo BufferedReader(ir);
System.out.println("Sistema Unix: ctrl-d o ctrl-c para salir"
+ "/nSistema Windows: Ctrl-z salir");
intentar {
//Leer una línea de datos y enviarla al monitor como estándar
s = in.readLine();
// Si se produce un error de E/S cuando se ejecuta el método readLine(), se generará una IOException.
mientras (s! = nulo) {
System.out.println("Leer: " + s);
s = in.readLine();
}
//Cerrar el lector almacenado en buffer
cercar();
} catch (IOException e) { // Captura cualquier excepción de IO.
e.printStackTrace();
}
}
}
4.arquitectura jerárquica java.IO
Las cosas más importantes de todo el paquete Java.io son 5 clases y una interfaz. Las cinco clases se refieren a File, OutputStream, InputStream, Writer y Reader; una interfaz se refiere a Serializable. Una vez que domine estas operaciones principales de IO, tendrá una comprensión preliminar del sistema IO en Java.
Java I/O incluye principalmente los siguientes niveles, incluidas tres partes:
1. La parte principal de la parte de transmisión IO;
2. La parte que no es de transmisión incluye principalmente algunas clases que ayudan a la parte de transmisión, como: clase File, clase RandomAccessFile y clase FileDescriptor;
3. Otras clases : clases relacionadas con la seguridad en la parte de lectura de archivos, como la clase SerializablePermission, y clases de sistema de archivos relacionadas con el sistema operativo local, como la clase FileSystem, la clase Win32FileSystem y la clase WinNTFileSystem.
Las clases principales son las siguientes:
1. Archivo (gestión y características de archivos): se utiliza para información de descripción de archivos o directorios, como generar nuevos directorios, modificar nombres de archivos, eliminar archivos, determinar la ruta del archivo, etc.
2. InputStream (operación de formato binario): clase abstracta, operación de entrada basada en bytes y es la clase principal de todos los flujos de entrada. Define características comunes que tienen todos los flujos de entrada.
3. OutputStream (operación de formato binario): clase abstracta. Operaciones de salida basadas en bytes. Es la clase principal de todos los flujos de salida. Define características comunes que tienen todos los flujos de salida.
Los caracteres en Java adoptan el estándar Unicode. Un carácter tiene 16 bits, es decir, un carácter está representado por dos bytes. Para ello, se introdujeron flujos para procesar caracteres en JAVA.
4. Lector (operación de formato de archivo): clase abstracta, operación de entrada basada en caracteres.
5. Escritor (operación de formato de archivo): clase abstracta, operación de salida basada en caracteres.
6. RandomAccessFile (operación aleatoria de archivos): tiene funciones ricas y puede realizar operaciones de acceso (entrada y salida) desde cualquier ubicación del archivo .
La arquitectura del flujo IO en Java es la siguiente:
5. Clase de archivo sin transmisión: clase de archivo
}
Descripción: Métodos de clase Archivo:
(1) existe () prueba si el archivo o directorio especificado existe en el disco
(2) mkdir() crea el directorio especificado por el objeto de archivo (directorio de una sola capa)
(3) createNewFile() crea el archivo especificado por el objeto de archivo
(4) list() devuelve todas las cadenas de nombres de archivos en el directorio
6. Biblioteca de clases de flujo Java.IO
El paquete java.io contiene todas las clases necesarias para la transmisión de E/S. Hay cuatro clases básicas en el paquete java.io: clases InputStream, OutputStream, Reader y Writer, que manejan flujos de bytes y flujos de caracteres respectivamente:
E/S de flujo de datos básicos
entrada/salida
flujo de bytes
flujo de personajes
flujo de entrada
flujo de entrada
Lector
flujo de salida
Flujo de salida
Escritor
De ellos se derivan otras variaciones de flujos en Java:
La versión JDK1.4 comenzó a introducir una nueva biblioteca de clases de E/S, que se encuentra en el paquete java.nio. La nueva biblioteca de clases de E/S utiliza canales y buffers para mejorar la eficiencia de las operaciones de E/S.
En el paquete java.io, java.io.InputStream representa el flujo de entrada de bytes y java.io.OutputStream representa el flujo de salida de bytes, que se encuentra en el nivel superior del paquete java.io. Ambas clases son clases abstractas, lo que significa que no se pueden crear instancias de ellas y se deben subclasificar para lograr ciertas funciones.
1. Clasificación específica de los flujos io.1. Clasificación general por tipo de E/S:
1. Memoria 1) Leer y escribir datos desde/hacia la matriz de memoria: CharArrayReader, CharArrayWriter, ByteArrayInputStream, ByteArrayOutputStream
2) Leer y escribir datos desde/hacia cadenas de memoria StringReader, StringWriter, StringBufferInputStream
2.Pipe pipeline implementa la entrada y salida de la tubería (comunicación entre procesos): PipedReader, PipedWriter, PipedInputStream, PipedOutputStream
3.Secuencia de archivos de archivos . Leer y escribir archivos: FileReader, FileWriter, FileInputStream, FileOutputStream
4. Entrada y salida de objetos de serialización de objetos : ObjectInputStream, ObjectOutputStream
5. El flujo de datos DataConversion lee y escribe según los tipos de datos básicos (los datos procesados son los tipos básicos de Java (como booleanos, bytes, enteros y números de punto flotante)): DataInputStream, DataOutputStream
6.La impresión incluye métodos de impresión convenientes: PrintWriter, PrintStream
7. El almacenamiento en caché almacena en caché los datos al leer o escribir para reducir la cantidad de E/S: BufferedReader, BufferedWriter, BufferedInputStream, BufferedOutputStream
8.Filtrado de flujo de filtrado , filtrado cuando se leen o escriben datos: paso FilterReader, FilterWriter, FilterInputStream, FilterOutputStream
9.La concatenación fusiona la entrada y conecta múltiples flujos de entrada en un solo flujo de entrada: SequenceInputStream
10.Contar filas al leer datos: LineNumberReader, LineNumberInputStream
11.Peeking Ahead realiza una lectura previa a través del mecanismo de almacenamiento en caché: PushbackReader, PushbackInputStream
12.La conversión entre bytes y caracteres convierte el flujo de bytes en un flujo de caracteres de acuerdo con ciertos estándares de codificación/decodificación, o realiza una conversión inversa (transmisión a lector, clase de conversión de escritor): InputStreamReader, OutputStreamWriter
2. Clasificación por fuente de datos (destino):
1. Archivo: FileInputStream, FileOutputStream, FileReader, FileWriter
2. byte[]: ByteArrayInputStream, ByteArrayOutputStream
3. Char[]: CharArrayReader, CharArrayWriter
4. Cadena: StringBufferInputStream, StringReader, StringWriter
5. Flujo de datos de red: InputStream, OutputStream, Reader, Writer
7. Flujo de bytes InputStream/OutputStream
InputStream es un flujo de entrada de bytes. Es en sí mismo una clase abstracta y debe confiar en sus subclases para implementar varias funciones. Esta clase abstracta es la superclase de todas las clases que representan flujos de entrada de bytes. Las secuencias heredadas de los datos de entrada de InputStream en el programa, y la unidad de datos son bytes (8 bits);
InputStream es una clase utilizada para ingresar datos de bytes, por lo que la clase InputStream proporciona tres métodos de lectura sobrecargados en la clase Inputstream:
(1) public abstract int read(): lee un byte de datos y el valor de retorno es un valor de tipo int con los bits altos llenos de 0. Si el valor de retorno = -1, significa que no se ha leído ningún byte y el trabajo de lectura ha finalizado.
(2) public int read (byte b []): lee b.length bytes de datos y colócalos en la matriz b. El valor de retorno es el número de bytes leídos. En realidad, este método se implementa llamando al siguiente método (3) public int read(byte b[ ], int off, int len): lee hasta len bytes de datos del flujo de entrada y los almacena con un desplazamiento de off en el b matriz.
(4) public int disponible (): devuelve el número de bytes que se pueden leer en el flujo de entrada. Nota: Si la entrada está bloqueada, el hilo actual se suspenderá. Si el objeto InputStream llama a este método, solo devolverá 0. Este método debe ser llamado por un objeto de subclase que herede la clase InputStream para que sea útil.
(5) salto largo público (n largo): ignora n bytes en el flujo de entrada, el valor de retorno es el número de bytes realmente ignorados, omite algunos bytes para leer (6) public int close (): después del uso, el La secuencia que abrimos debe estar cerrada.
Subcategorías principales:
1) FileInputStream usa un archivo como InputStream para realizar la operación de lectura del archivo 2) ByteArrayInputStream: usa un búfer en la memoria como InputStream 3) StringBufferInputStream: usa un objeto String como InputStream
4) PipedInputStream: implementa el concepto de tubería, utilizado principalmente en subprocesos 5) SequenceInputStream: fusiona múltiples InputStreams en un InputStream
Subcategorías principales:
1) ByteArrayOutputStream: almacena información en un búfer en la memoria
2) FileOutputStream: almacena información en un archivo
3) PipedOutputStream: implementa el concepto de tubería, utilizado principalmente en subprocesos.
4) SequenceOutputStream: fusiona varios OutStreams en un OutStream
Determinación del final de la secuencia: cuando el valor de retorno del método read() es -1 cuando el valor de retorno de readLine() es nulo;
3. Flujo de entrada de archivos: clase FileInputStreamFileInputStream puede usar el método read() para leer un byte a la vez y devolverlo como un tipo int, o usar el método read() para leer en una matriz de bytes. ¿Cuántos bytes se leen según la cantidad de elementos en el? matriz de bytes. En el proceso de lectura o escritura de un archivo completo, dicha matriz de bytes generalmente se usa como búfer, porque dicha matriz de bytes generalmente desempeña un papel intermedio en la recepción de datos.
Cómo utilizar(2)
FileInputStream en=newFileInputStream(“d: /abc.txt”);
Ejemplo de programa:
Mostrar el contenido del programa InputFromFile.java en el monitor
archivo de prueba de clase pública {
public static void main (String args []) lanza IOException {
intentar{
FileInputStream rf=new FileInputStream("InputFromFile.java");
int n=512; búfer de bytes[]=nuevo byte[n];
while((rf.read(búfer,0,n)!=-1)&&(n>0)){
System.out.println(nueva cadena(búfer));
}
Sistema.out.println();
rf.cerrar();
} captura(IOException IOe){
System.out.println(IOe.toString());
}
}
}
La clase FileOutputStream se utiliza para procesar flujos de datos que utilizan archivos como destinos de salida de datos; una cadena que representa el nombre del archivo, que también puede ser un objeto File o FileDescriptor.
Hay dos formas de crear un objeto de secuencia de archivos:
Camino 1:
Archivo f=nuevo archivo ("d:/myjava/write.txt ");
FileOutputStream out= nuevo FileOutputStream (f);
Camino 2:
FileOutputStream out=new FileOutputStream("d:/myjava/write.txt ");
Método 3: el constructor toma el objeto FileDescriptor() como parámetro.
FileDescriptor() fd=nuevo FileDescriptor();
FileOutputStream f2=nuevo FileOutputStream(fd);
Método 4: el constructor toma el nombre del archivo como primer parámetro y un valor booleano como segundo parámetro.
FileOutputStream f=new FileOutputStream("d:/abc.txt",true);
Nota: (1) Al escribir datos en un archivo, si el archivo ya existe, el archivo existente se sobrescribirá (2) Cuando finalice la operación de lectura/escritura, se debe llamar al método de cierre para cerrar la secuencia;
}
archivo de prueba de clase pública {
public static void main (String args []) lanza IOException {
intentar {
Archivo en Archivo = nuevo Archivo ("copiar.java");
Archivo outFile = nuevo archivo ("copy2.java");
FileInputStream finS = nuevo FileInputStream(enFile);
FileOutputStream foutS = nuevo FileOutputStream(outFile);
intc;
mientras ((c = finS.read()) != -1) {
foutS.write(c);
}
finS.close();
foutS.close();
} captura (IOException e) {
System.err.println("FileStreamsTest: " + e);
}
}
}
El acceso de la computadora a dispositivos externos requiere mucho tiempo. Cuanto mayor sea la frecuencia de acceso a la memoria externa, mayor será la probabilidad de que la CPU esté inactiva. Para reducir el número de accesos a la memoria externa, se deben leer y escribir más datos en un solo acceso al periférico. Para ello, además de los mecanismos de lectura y escritura necesarios para el intercambio de datos entre programas y nodos de flujo, también se debe agregar un mecanismo de almacenamiento en búfer. Flujo almacenado en búfer significa que a cada flujo de datos se le asigna un búfer, y un búfer es una memoria que almacena datos temporalmente. Esto puede reducir la cantidad de accesos al disco duro y mejorar la eficiencia de la transmisión.
BufferedInputStream: al escribir datos en la secuencia almacenada en el búfer, los datos primero se escriben en el búfer. Una vez que el búfer está lleno, el sistema envía los datos al dispositivo de salida de inmediato.
BufferedOutputStream: al leer datos del flujo almacenado en el búfer, el sistema primero lee los datos del búfer. Cuando el búfer está vacío, el sistema luego lee los datos del dispositivo de entrada al búfer.
Conecte BufferedInputStream a FileInputStream
FileInputStreamin=newFileInputStream( "archivo1.txt ");
BufferedInputStreambin=newBufferedInputStream(en);
2) Escribir memoria en archivo:
Conecte BufferedOutputStream a FileOutputStream
FileOutputStreamout=newFileOutputStream(“archivo1.txt”);
BufferedOutputStreambin=newBufferedInputStream(fuera);
clase pública ReadWriteToFile {
public static void main (String args []) lanza IOException {
InputStreamReader sin = nuevo InputStreamReader(System.in);
BufferedReader bin = nuevo BufferedReader(sin);
FileWriter out = new FileWriter("miarchivo.txt");
Batalla de BufferedWriter = nuevo BufferedWriter(fuera);
Cadena s;
mientras ((s = bin.readLine()).length() > 0) {
combate.write(s, 0, s.length());
}
}
}
8. Escritor/lector de flujo de caracteres
Los caracteres en Java adoptan el estándar Unicode. Un carácter tiene 16 bits, es decir, un carácter está representado por dos bytes. Para ello, se introdujeron flujos para procesar caracteres en JAVA.
Clase abstracta para leer secuencias de caracteres. Los únicos métodos que deben implementar las subclases son read(char[], int, int) y close(). Sin embargo, la mayoría de las subclases anularán algunos de los métodos definidos aquí para proporcionar mayor eficiencia y/o funcionalidad adicional.
1) FileReader: Correspondiente a FileInputStream, se utiliza principalmente para leer archivos de caracteres, utiliza la codificación de caracteres predeterminada y tiene tres constructores:
(1) Utilice el nombre del archivo como una cadena: FileReader f=new FileReader(“c:/temp.txt”);
(2) El constructor toma el objeto Archivo como parámetro.
Archivo f=nuevo archivo(“c:/temp.txt”);
FileReader f1=nuevo FileReader(f);
(3) El constructor toma el objeto FileDescriptor como parámetro
FileDescriptor() fd=nuevo FileDescriptor()
FileReader f2=nuevo FileReader(fd);
(1) Utilice la matriz de caracteres especificada como parámetro: CharArrayReader(char[])
(2) Utilice una matriz de caracteres como flujo de entrada: CharArrayReader(char[], int, int)
Para leer una cadena, el constructor es el siguiente: public StringReader(String s);
2) CharArrayReader: corresponde a ByteArrayInputStream
3) StringReader: corresponde a StringBufferInputStream
4) Lector de flujo de entrada
Leer bytes del flujo de entrada y convertirlos en caracteres: Public inputstreamReader(inputstream is);
5) FilterReader: permite filtrar flujos de caracteres
lector de filtro protegido (lector r);
6) BufferReader: acepta un objeto Reader como parámetro y le agrega un búfer de caracteres. Utilice el método readline () para leer una línea.
BufferReader público (Lector r);
Métodos principales:
(1) publicintread()throwsIOException;//Leer un carácter, el valor de retorno es el carácter leído
(2) publicintread(charcbuf[])throwsIOException;/*Lee una serie de caracteres en la matriz cbuf[], y el valor de retorno es el número de caracteres realmente leídos*/
(3) publicabstractintread(charcbuf[],intoff,intlen)throwsIOException;
/*Leer caracteres len y almacenarlos a partir del subíndice de la matriz cbuf[]. El valor de retorno es el número real de caracteres leídos. Este método debe ser implementado por una subclase*/.
Clase abstracta para escribir en secuencias de caracteres. Los únicos métodos que deben implementar las subclases son write(char[], int, int), flush() y close(). Sin embargo, la mayoría de las subclases anularán algunos de los métodos definidos aquí para proporcionar mayor eficiencia y/o funcionalidad adicional. Sus subcategorías son las siguientes:
1) FileWrite: corresponde a FileOutputStream y escribe datos de tipo de caracteres en un archivo, utilizando la codificación de caracteres y el tamaño de búfer predeterminados.
Public FileWrite (archivo f);
2) chararrayWrite: Corresponde a ByteArrayOutputStream, utilizando el búfer de caracteres como salida.
Público CharArrayWrite();
3) PrintWrite: genera un PrintWriter público de salida formateado (sistema operativo de flujo de salida);
4) filterWriter: se utiliza para escribir un flujo de caracteres de filtro protegido FilterWriter (Writer w);
5) PipedWriter: corresponde a PipedOutputStream
6) StringWriter: no existe un flujo orientado a bytes correspondiente
Métodos principales:
(1) publicvoidwrite(intc)throwsIOException; //Escribe los 16 bits inferiores del valor entero c en el flujo de salida (2) publicvoidwrite(charcbuf[])throwsIOException //Escribe la matriz de caracteres cbuf[] en el flujo de salida ( 3) publicabstractvoidwrite(charcbuf[],intoff,intlen) throwsIOException; //Escribe caracteres len comenzando desde el índice en la matriz de caracteres cbuf[] en el flujo de salida (4) publicvoidwrite(Stringstr)throwsIOException; str se escriben en el flujo de salida (5) publicvoidwrite(Stringstr,intoff,intlen)throwsIOException; //Escribe caracteres len comenzando desde el índice off en la cadena str en el flujo de salida (6) flux() //Vacia el flujo de salida y genera todas las palabras almacenadas en caché Festival.
(7)close() cierra la secuencia publicabstractvoidclose()throwsIOException
3. La diferencia entre InputStream y Reader, la diferencia entre OutputStream y Writer
public static void main (String args []) lanza IOException {
System.out.println("Se utiliza codificación de caracteres Unicode en la memoria: ");
char c='bueno';
int bit bajo=c&0xFF; int bit alto=(c&0xFF00)>>8;
System.out.println(""+Bit bajo+" "+Bit alto);
Cadena s="Aceptar";
System.out.println("Codificación de caracteres predeterminada del sistema operativo local:");
readBuff(s.getBytes());
System.out.println("Usando codificación de caracteres GBK:");
readBuff(s.getBytes("GBK"));
System.out.println("Codificación de caracteres UTF-8:");
readBuff(s.getBytes("UTF-8"));
}
9. Subclases de la clase de excepción IOException
1.Excepción EOF de clase pública:
Este tipo de excepción se produce cuando se alcanza de forma anormal el final del archivo o el final del flujo de entrada.
2.Excepción FileNotFoundException de clase pública:
Se produce una excepción cuando no se puede encontrar el archivo.
3.Excepción IOinterrumpida de clase pública:
Este tipo de excepción se lanza cuando se interrumpe una operación de E/S.