Visão geral do fluxo de buffer do Java IO-3

Insira a descrição da imagem aqui

Fluxo do buffer

Os fluxos em buffer também são chamados de fluxos avançados, que são aprimoramentos para os quatro fluxos básicos do FileXXX; portanto, eles também são quatro fluxos, classificados de acordo com o tipo de dados:
um fluxo de buffer que pode ler e gravar com eficiência, um fluxo de conversão que pode converter a codificação e um objeto de armazenamento persistente. Fluxo serializado

  • Fluxo do buffer de bytes : BufferedInputStream, BufferedOutputStream
  • Fluxo do buffer de caracteres : BufferedReader, BufferedWriter

Fluxo de entrada em buffer de bytes [BufferedInputStream]

Insira a descrição da imagem aqui
! ! ! Código ativado! ! !

public class Demo01BufferedInputStreram {

    public static void main(String[] args) throws IOException {

        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("F:\\cccc.txt"));
        byte[] bytes = new byte[1024];
        int len = 0;
        while ((len = bis.read(bytes)) != -1) {
            System.out.println(new String(bytes, 0, len));
        }
        bis.close();
    }

}

! ! ! O resultado! ! ! A função fornecida pelo FileInputStream é a mesma que ler o conteúdo do arquivo com eficiência
Insira a descrição da imagem aqui

Fluxo de saída em buffer de bytes [BufferedOutputStream]

Insira a descrição da imagem aqui
! ! ! Código ativado! ! !

public class Demo02BufferedOutputStream {

    public static void main(String[] args) throws IOException {

        BufferedOutputStream bos = new BufferedOutputStream(
                new FileOutputStream("F:\\dddd.txt", true));
        String content = "!!!!Hello World!!!" + "\r\n";
        for (int i = 0; i < 10; i++) {
            bos.write(content.getBytes());
        }
        System.out.println("文件输出成功");
        bos.close();


    }
}

**! ! ! O resultado! ! ! ** A função fornecida pelo FileIOnputStream é a mesma que ler o conteúdo do arquivo com eficiência
Insira a descrição da imagem aqui

Demo CopyFile

! ! ! Digite o código e copie os arquivos! ! ! Não se preocupe com o arquivo. . . .

public class Demo03CopyFIle {

    public static void main(String[] args) throws IOException {

        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\Media\\MO8EPSG_1.rmvb"));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("F:\\MO8EPSG_1.rmvb"));

        long start = System.currentTimeMillis();
        byte[] bytes = new byte[10245];
        int len = 0;
        while ((len = bis.read(bytes)) != -1) {
            bos.write(bytes, 0, len);
        }

        bis.close();
        bos.close();

        long end = System.currentTimeMillis();
        System.out.println("本次复制文件用了:" + (end - start) + "毫秒");
    }

}

**! ! ! O resultado! ! ! ** Foram necessários apenas 1 segundo para copiar um arquivo G
Insira a descrição da imagem aqui

Fluxo de entrada com buffer de caracteres [BufferedReader]

Leia o texto de um fluxo de entrada de caracteres e caracteres de buffer para fornecer uma leitura eficiente de caracteres, matrizes e linhas.
O tamanho do buffer pode ser especificado ou o tamanho padrão pode ser usado. O valor padrão é grande o suficiente para a maioria dos usos.

Insira a descrição da imagem aqui

! ! ! Código ativado! ! !

public class BufferedReaderAndBufferedWriter {![在这里插入图片描述](https://img-blog.csdnimg.cn/20200217205959345.png)

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new FileReader("F:\\cccc.txt"));
        char[] chars = new char[1024];
        int len = 0;
        while ((len = br.read(chars)) != -1) {
            System.out.println(new String(chars, 0, len));
        }

    }

}

! ! ! O resultado! ! !
Insira a descrição da imagem aqui

Nota:
A entrada do arquivo especificado será armazenada em buffer. Não há armazenamento em buffer e cada chamada para read () ou readLine () pode fazer com que os bytes sejam lidos no arquivo, convertidos em caracteres e depois retornados. Isso pode ser muito ineficiente
. Os programas que usam DataInputStreams para entrada de texto podem ser substituídos pelo BufferedReader apropriado Localize cada DataInputStream

Fluxo de saída do buffer de caracteres [BufferedWriter]

Escreva texto em um fluxo de saída de caracteres, armazenando em buffer caracteres para fornecer gravação eficiente de caracteres, matrizes e seqüências de caracteres únicos.
Você pode especificar o tamanho do buffer ou aceitar o tamanho padrão. O valor padrão é grande o suficiente para a maioria dos usos.

Insira a descrição da imagem aqui

! ! ! Código ativado! ! !

public class Demo02BufferedWriter {

    public static void main(String[] args) throws IOException {

        BufferedWriter bw = new BufferedWriter(new FileWriter("F:\\ffff.txt", true));
        String content = "Hello World" + "\r\n";
        for (int i = 0; i < 10; i++) {
            bw.write(content);
        }
        bw.close();
    }
}

! ! ! O resultado! ! !
Insira a descrição da imagem aqui

Nota:
A saída do PrintWriter será armazenada em buffer em um arquivo. Sem buffer, todas as chamadas para o método print () convertem caracteres em bytes e gravam no arquivo imediatamente, o que pode ser muito ineficiente

Publicado 24 artigos originais · elogiado 33 · visitas 2391

Acho que você gosta

Origin blog.csdn.net/weixin_41241629/article/details/104353246
Recomendado
Clasificación