Introducción y resumen de los conceptos relacionados con la entrada y salida de Java (archivo, flujo IO) (7)

¡Acostúmbrate a escribir juntos! Este es el séptimo día de mi participación en el "Nuevo plan diario de Nuggets · Desafío de actualización de abril", haga clic para ver los detalles del evento .

La introducción anterior y el resumen de los conceptos relacionados con la entrada y la salida de Java (archivo, flujo de E/S) (6) El artículo presenta los métodos más utilizados de la clase abstracta OutputStream en el desarrollo diario. Este artículo presentará algunos de los más utilizados en el desarrollo. uso de una clase de implementación.

ByteArrayOutputStream

Como hemos presentado antes, esta clase es una clase de implementación del flujo de salida, y su propio significado es la traducción al chino de esta clase: byte·array·output·stream.

Su función real es escribir datos en este flujo de salida, y luego los datos se almacenarán en una matriz de bytes . La matriz de bytes en sí se usa como un "búfer", que crecerá automáticamente con el aumento continuo de los datos escritos , sin que el usuario se preocupe.

Esta clase tiene dos constructores:

public ByteArrayOutputStream()
public ByteArrayOutputStream(int size)
复制代码

Al crear una instancia del flujo de salida de la matriz de bytes, el tamaño predeterminado de la matriz de bytes utilizada para el almacenamiento en caché es 32 (el primer constructor). Si desea modificar el tamaño de la matriz, puede usar el segundo constructor y pasar el parámetros Determina el tamaño de la matriz de caché.

Después de crear el flujo de salida de la matriz de bytes, puede llamar al método de escritura para escribir los datos.Hay tres tipos diferentes de métodos de escritura, puede consultar el artículo anterior.

Aquí hay un ejemplo directo, para comprender intuitivamente el uso de ByteArrayOutputStream.

public static void main(String[] args) throws IOException {
    // 数据来源
    FileInputStream fileInputStream = null;
    // 字节数组输出流
    ByteArrayOutputStream byteArrayOutputStream;
    try {
        fileInputStream = new FileInputStream("abc/def/ghi.txt");
        byteArrayOutputStream = new ByteArrayOutputStream();
        int tempResult;
        while ((tempResult = fileInputStream.read()) != -1) {
            // 从输入流中读取到的数据依次写入到输出流中
            byteArrayOutputStream.write(tempResult);
        }
        byte[] result = byteArrayOutputStream.toByteArray();
        // 输入utf-8 字符集,将缓冲区的内容转换为字符串
        System.out.println(new String(result, "utf-8"));
        // 或者直接调用toString() 方法
        System.out.println(byteArrayOutputStream.toString("utf-8");
        fileInputStream.close();
    } catch (Exception e) {
    } finally {
        fileInputStream.close();
    }
}
复制代码

En resumen, usar ByteArrayOutputStream es crear una matriz de bytes en la memoria y guardar todos los datos enviados a la secuencia de salida en esta matriz de bytes, que también se puede considerar como un búfer. Una vez que los datos se escriben en el búfer, puede llamar a ByteArray() o toString() para la salida.

Cuando usamos el método toString(), podemos especificar el conjunto de caracteres de la cadena de salida. Use el conjunto de caracteres especificado (parámetro: charsetName) para decodificar bytes y luego convierta el contenido del búfer en una cadena. La longitud de la nueva cadena es la longitud del juego de caracteres convertido, por lo que puede no ser igual a la longitud de la matriz de bytes.

FileOutputStream

FileOutputStream es un flujo de salida de bytes de archivo.La función de esta clase es escribir los datos en la memoria en el archivo en el disco duro.

Para la clase FileOutputStream, tiene cinco constructores.

public FileOutputStream(String name)
public FileOutputStream(File file)
public FileOutputStream(File file,boolean append)
public FileOutputStream(String name,boolean append)
public FileOutputStream(FileDescriptor fdObj)
复制代码

El significado de estos cinco constructores es obvio de un vistazo. Solo hay un parámetro que necesita nuestra atención, y ese es ese appendparámetro.

El valor predeterminado de este parámetro es falso. Si es falso, el contenido recién escrito sobrescribirá el contenido del archivo original; si es verdadero, los datos nuevos se agregarán a los datos originales.

Resumir

Estas dos subclases son OutputStreamdos clases de implementación comunes de clases abstractas. Estos dos son los que más usamos en nuestro desarrollo diario.

En los siguientes artículos, presentaremos brevemente OutputStreamvarias clases de implementación que no se usan comúnmente. Si no las usa o no las comprende, puede optar por omitir el siguiente artículo.

Supongo que te gusta

Origin juejin.im/post/7083662044389441549
Recomendado
Clasificación