Codificación y decodificación y flujo de caracteres
1, codificación y decodificación
2, utilice una función de salida y entrada de secuencia de caracteres
Salida:
(1),OutputStreamWriter(OutputStream out)
Cree OutputStreamWriter mediante el juego de caracteres predeterminado.
(2),OutputStreamWriter(OutputStream out, String charsetName)
Cree OutputStreamWriter mediante el juego de caracteres especificado.
3. Utilice la salida de flujo de caracteres de búfer y la función de entrada para almacenar en búfer la nueva línea específica de la secuencia de salida de caracteres () y la secuencia de entrada de caracteres de búfer.
4. Utilice las características del búfer para completar la copia del archivo Java.
En primer lugar, codificación y decodificación
String s = "China";
byte[] byt =null;
try {
byt = s.getBytes("GBK");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
System.out.println(Arrays.toString(byt));
}
Resultado:
Texto China, usamos GBK para decodificar, obtener [-42, -48, -71, -6], una palabra china corresponde a dos bytes.
A continuación queremos decodificar el UTF-8 más utilizado en Unicode.
UTF-8 decodifica para obtener [-28, -72, -83, -27, -101, -67], correspondiente a 3 bytes de caracteres chinos.
En este momento, creemos que si usa código GBK, ¿qué pasará con la decodificación UTF-8?
byte[] byt = new byte[] {-42, -48, -71, -6};
try {
System.out.println(new String(byt, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
En este momento, la salida es confusa, cambiamos a decodificación GBK.
Por lo tanto, utilice una codificación de conjunto de codificación de caracteres, debe usarla en la decodificación, de lo contrario habrá problemas confusos.
En segundo lugar, la salida y la entrada de la secuencia de caracteres
FileInputStream in = new FileInputStream("src//file//demo01.txt");
FileOutputStream out = new FileOutputStream("src//file//demo01.txt");
OutputStreamWriter ow = new OutputStreamWriter(out);
InputStreamReader ir = new InputStreamReader(in);
char[] charr1 = "hellow,world".toCharArray();
ow.write(charr1);
int data;
while((data = ir.read()) != -1)
System.out.print((char)(data));
ir.close();
ow.close();
Resultado:
Hemos encontrado que dos secuencias se operan mientras podemos ver que hay contenido en el archivo, pero utilice el método de lectura para leer Return -1. Estamos creando secuencias de entrada después de cerrar la secuencia de salida a través de la prueba.
FileOutputStream out = new FileOutputStream("src//file//demo01.txt");
OutputStreamWriter ow = new OutputStreamWriter(out);
char[] charr1 = "hellow,world".toCharArray();
ow.write(charr1);
ow.close();
FileInputStream in = new FileInputStream("src//file//demo01.txt");
InputStreamReader ir = new InputStreamReader(in);
int data;
while((data = ir.read()) != -1)
System.out.print((char)(data));
ir.close();
}
}
Resultado:
Por lo tanto, podemos concatenar, las secuencias de salida y las secuencias de entrada no pueden operar un archivo al mismo tiempo, y la secuencia de salida debe desactivarse para usar la secuencia de entrada al mismo tiempo. Además, debe apagarse después de usar un flujo.(1, si la secuencia de salida no escribe el contenido del archivo, es muy probable que la secuencia no esté cerrada.
2, Close libera recursos, en lugar de contener recursos, puede reclamar automáticamente objetos, expresados como memoria asignada a memoria pero no puede reciclar recursos, y puede causar agotamiento de recursos si no realiza Close. )
En tercer lugar, el uso del flujo de almacenamiento en búfer y su método específico
FileOutputStream out = new FileOutputStream("src//file//demo01.txt");
OutputStreamWriter ow = new OutputStreamWriter(out);
BufferedWriter bw = new BufferedWriter(ow);
char[] charr1 = "hellow,world".toCharArray();
bw.write(charr1);
bw.newLine();
bw.flush();// Write a line to use Flush, refresh the stream buffer.
bw.write("Hello there");
bw.close();
ow.close();
out.close();
FileInputStream in = new FileInputStream("src//file//demo01.txt");
InputStreamReader ir = new InputStreamReader(in);
BufferedReader br = new BufferedReader(ir);
String s;
while((s = br.readLine()) != null) {
System.out.print(s);
}
br.close();
ir.close();
in.close();
Resultado:
Hemos encontrado que la nueva línea no se lee, por lo que cada una de las necesidades de cada lectura necesita ser envolvente.
Resultado:
Cuarto, utilice el flujo de búfer para copiar archivos Java
Pasaremos un FileWriter y FileReader objetos a la secuencia de búfer, que es más fácil de usar.
FileWriter writer = new FileWriter("src//file//copy.java");
BufferedWriter bw = new BufferedWriter(writer);
FileReader reader = new FileReader("src//home_work//Test_27.java");
BufferedReader br = new BufferedReader(reader);
String s;
while((s = br.readLine()) != null) {
bw.write(s);
bw.flush();
bw.newLine();
}
bw.close();
writer.close();
br.close();
reader.close();
}
Resultado:
Lo anterior se utiliza directamente para producir anomalías de E/S y no se utiliza la estructura TRY-CATCH. Y con el fin de facilitar la escritura del método Close en el bloque de código Finally, es necesario utilizar el método descrito anteriormente en el proyecto para escribir la conformidad.
.