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]
! ! ! 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
Fluxo de saída em buffer de bytes [BufferedOutputStream]
! ! ! 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
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
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.
! ! ! 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! ! !
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.
! ! ! 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! ! !
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