flujo de conversión de Java

En circunstancias normales, puede ser un flujo de bytes para todos manipulación de datos, pero a veces cuando nos utilizar para hacer frente a alguna secuencia de caracteres de texto, por ejemplo, cuando se visualiza el texto de los caracteres chinos es la necesidad de adoptar una corriente más conveniente. Así Java IO corriente ofrece dos utilizados para convertir un flujo de bytes para convertir el flujo de flujo de caracteres.

InputStreamReader para flujo de entrada de bytes en una entrada de flujo de caracteres, en el que el flujo de salida de bytes para OutputStreamWriter convertida a corriente de salida . Uso conmutaciones distorsión se puede evitar en cierta medida, también puede especificar el conjunto de caracteres utilizado para entrada y salida.

El java.txt salida de "motor de búsqueda Baidu" seis palabras, java.txt guarda como formato "UTF-8", y luego lee el flujo de bytes mediante el siguiente código:

public static void main(String[] args) {
    try {
        FileInputStream fis = new FileInputStream("D://java.txt");
        int b = 0;
        while ((b = fis.read()) != -1) {
            System.out.print((char) b);
        }
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

La salida se ???, se encontró que los chinos son ilegibles. La siguiente matriz de bytes, y explícitamente incorporado mediante el establecimiento de un formato de codificación de cadena, como sigue:

public static void main(String[] args) {
    try {
        FileInputStream fis = new FileInputStream("D://java.txt");
        byte b[] = new byte[1024];
        int len = 0;
        while ((len = fis.read(b)) != -1) {
            System.out.print(new String(b, 0, len, "UTF-8"));
        }
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

En esta salida es el motor de búsqueda de Baidu, pero cuando un gran almacenamiento de texto, no habrá decodificar las preguntas correctas, y la longitud de bytes no se puede establecer de forma automática de acuerdo a decodificar el contenido, entonces usted necesita para completar el flujo de conversión. Código es el siguiente:

public static void main(String[] args) {
    try {
        FileInputStream fis = new FileInputStream("D://java.txt");
        InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
        int b = 0;
        while ((b = isr.read()) != -1) {
            System.out.print((char) b);    // 输出结果为“百度搜索引擎”
        }
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

Por ejemplo, para introducir el uso de conversión de flujo de entrada del teclado . Java utiliza System.in representan la salida estándar, es decir, la entrada de teclado, pero esto es un ejemplo de la clase InputStream flujo de entrada estándar, menos cómodo de usar, sino también el contenido de la entrada de teclado es el contenido del texto, es posible convertirlo en el flujo de entrada de caracteres InputStreamReader, cuando lector ordinario lee el contenido de entrada todavía no es muy conveniente, puede ser Reader de nuevo la normalidad empaquetado en BufferedReader, utilice el método readLine BufferedReader () para leer una sola línea. Como se muestra en el siguiente procedimiento.

public static void main(String[] args) {
    try {
        // 将 System.in 对象转换成 Reader 对象
        InputStreamReader reader = new InputStreamReader(System.in);
        // 将普通的Reader 包装成 BufferedReader
        BufferedReader br = new BufferedReader(reader);
        String line = null;
        // 利用循环方式来逐行的读取
        while ((line = br.readLine()) != null) {
            // 如果读取的字符串为“exit”,则程序退出
            if (line.equals("exit")) {
                System.exit(1);
            }
            // 打印读取的内容
            System.out.println("输入内容为:" + line);
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

Las líneas de código por encima de 4 y 6 filas system.In corriente BufferedReader, BufferReader empaquetado tener una función de amortiguamiento, se puede leer una línea de texto, marcado por saltos de línea, saltos de línea si no se lee, la rutina bloqueadas hasta que la lectura hasta el salto de línea. Ejecutar el programa anterior puede encontrar esta función en la consola para realizar la entrada, sólo pulsa la tecla Intro, el programa imprimirá el contenido que acaba de introducir.

Dado que el método tiene la readLine BufferedReader (), fácilmente se puede leer en una sola línea, por lo que a menudo el texto se lee en el envase BufferedReader flujo de entrada, fácil de leer flujo de entrada de texto.

Publicados 457 artículos originales · ganado elogios 94 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_45743799/article/details/104711113
Recomendado
Clasificación