Flujo de caracteres de aprendizaje JAVA, codificación y decodificación, lectura y escritura de datos de flujo de caracteres, flujo de búfer de caracteres

flujo de caracteres

Se almacena un carácter chino, la codificación GBK ocupa 2 bytes y la codificación UTF-8 ocupa 3 bytes.
Flujo de caracteres = flujo de bytes + tabla de codificación;
cuando se almacenan caracteres chinos, sin importar qué codificación se seleccione para el almacenamiento, el primer byte Ambos son negativos
, solo se pueden copiar datos de texto

codificación

Almacene los caracteres en la computadora de acuerdo con ciertas reglas.
Descodificación: analice y muestre los números binarios en la computadora de acuerdo con las reglas correspondientes.
Codificación de caracteres: la correspondencia entre un conjunto de caracteres del lenguaje natural y números binarios Los
conjuntos de caracteres comunes son: Conjunto ASCII: un sistema de codificación de computadora basado en el alfabeto latino, utilizado para mostrar el inglés moderno, es un conjunto de todos los caracteres compatibles con el sistema
GBXXX conjunto de caracteres de la serie: como GB2312: dos caracteres superiores a 127 se combinan para representar un carácter chino;
GBK : la tabla de códigos chinos más utilizada, que contiene más de 2 W de caracteres chinos, totalmente compatible con GB2312;
GB18030: el último código chino tabla, se incluyen más de 70,000 caracteres chinos y se admiten idiomas minoritarios.
Conjunto de caracteres Unicode: diseñado para expresar cualquier carácter en cualquier idioma, es un estándar en la industria, también conocido como Unicode y código universal estándar.Existen tres esquemas de codificación: UTF-8, UTF-16, UTF-32, UTF-
Codificación 8 : se puede usar para representar cualquier carácter en Unicode, usando de 1 a 4 bytes para codificar cada carácter. El Grupo de Ingeniería de Trabajo de Internet requiere que todos los protocolos de Internet admitan la codificación UTF-8.Reglas de codificación UTF-8

Problemas de codificación y decodificación en cadenas

Método de codificación:
byte[] getBytes() (utilice la codificación predeterminada)
byte[] getBytes​(String charsetName)
utiliza el conjunto de caracteres con nombre para codificar la cadena en una serie de bytes y almacenar el resultado en una nueva matriz de bytes.
Método de decodificación:
Cadena​(byte[] bytes) (use la decodificación predeterminada)
Cadena​(byte[] bytes, juego de caracteres Charset)
Construya una nueva cadena para decodificar el juego de caracteres especificando una matriz de bytes especificados

Ejemplo de código:

//编码
       String s = "哈哈";
        byte[] byt = s.getBytes("GBK");
        System.out.println(Arrays.toString(byt));
//解码
        String ss = new String(byt,"GBK");
        System.out.println(ss);

Decodificación y codificación en flujos de caracteres

Clase base abstracta del flujo de caracteres:
Reader: clase base abstracta del flujo de entrada de caracteres
Writer: clase base abstracta del flujo de salida de caracteres
Dos clases relacionadas con la codificación y decodificación en el flujo de caracteres:
InputStringReader
OutputStringWriter

Ejemplo:

        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("1215/file.txt"),"UTF-8");
        osw.write("哈哈");
        osw.close();
        InputStreamReader isr = new InputStreamReader(new FileInputStream("1215/file.txt"),"UTF-8");
        int ch;
        while ((ch=isr.read()) != -1){
    
    
            System.out.println((char)ch);
        }
        isr.close();

5 formas de escribir datos en flujo de caracteres

5 formas de escribir datos en flujo de caracteres
Después de que el flujo de caracteres escribe datos, se almacena temporalmente en el área del búfer. Si se va a mostrar antes de cerrar el flujo de salida, debe escribirse en el archivo con el método de vaciado. Después de vaciar, puede continuar escribiendo

Dos métodos de lectura de flujo de caracteres

flujo de caracteres leer datos
El formato es el mismo que el flujo de bytes, excepto que uno es un byte y el otro es un carácter.

        char[] cha = new char[1024];
        int len;
        while ((len = isr.read(cha)) != -1){
    
    
            System.out.println(new String(cha,0,len));
        }
        isr.close();

FileWriter,FileReader

Clase conveniente para escribir archivos de caracteres. El constructor de esta clase asume que la codificación de caracteres predeterminada y el tamaño de búfer de bytes predeterminado son aceptables. Para especificar estos valores usted mismo, si hay problemas de codificación, construya un OutputStreamWriter en FileOutputStream.

FileReader, FileWriter​(String fileName) Clase de conveniencia para escribir archivos de caracteres,
construye un objeto FileWriter dado un nombre de archivo.

        FileReader fr = new FileReader("1215/file.txt");
        FileWriter fw = new FileWriter("1215/file1.txt");

        char[] cha = new char[1024];
        int ch;
        while((ch=fr.read()) != -1){
    
    
            fw.write(cha,0,ch);
        }
        fw.close();
        fr.close();

flujo de búfer de caracteres

Un BufferedReader
lee texto de un flujo de entrada de caracteres, almacenando en búfer los caracteres para proporcionar una lectura eficiente de caracteres, matrices y líneas.
Un BufferedWriter
escribe texto en un flujo de salida de caracteres, almacenando en búfer los caracteres para proporcionar una escritura eficiente de caracteres, matrices y cadenas individuales.
Se puede especificar el tamaño del búfer o se puede usar el tamaño predeterminado

        BufferedWriter bw = new BufferedWriter(new FileWriter("1215/file.txt"));
        bw.write("yoyo");
        bw.write("sosos");
        bw.close();

        BufferedReader br = new BufferedReader(new FileReader("1215/file.txt"));

        int len;
        char[] cha =new char[1024];
        while((len=br.read(cha)) != -1){
    
    
            System.out.println(new String(cha,0,len));
        }

        while((len=br.read()) != -1){
    
    
            System.out.print((char)len);
        }
        br.close();

Características específicas de los flujos de búfer de caracteres:
La función única de la carretera de amortiguamiento

//按整行读取(只读内容,不读换行的符号)
        String line;
        while ((line=br.readLine()) != null){
    
    
            System.out.println(line);
        }

copiar archivos

        String line;
        while ((line=br.readLine()) != null){
    
    
            bw.write(line);
            bw.newLine();
        }

ejemplo de código

archivo a colección

      BufferedReader br = new BufferedReader(new FileReader("1215/file.txt"));
        ArrayList<String> list = new ArrayList<>();

        String line;
        while((line=br.readLine())!= null){
    
    
            list.add(line);
        }
        for(String s : list){
    
    
            System.out.println(s);
        }

Mini Programa de Lotería

        BufferedReader br = new BufferedReader(new FileReader("1215/file.txt"));//file里按行写入名单
        ArrayList<String> list = new ArrayList<>();

        String line;
        while((line=br.readLine())!= null){
    
    
            list.add(line);
        }

        Random r = new Random();
        int index = r.nextInt(list.size());

        String luck = list.get(index);
        System.out.println("the luck one is "+ luck);

        br.close();

Supongo que te gusta

Origin blog.csdn.net/weixin_52723971/article/details/111187092
Recomendado
Clasificación