Fluxo de entrada / saída com buffer de E / S Java

Fluxo de entrada / saída com buffer

BufferedInputStrean 与 BufferedOutputStream 类

Cache é uma otimização de desempenho de E / S. O fluxo de cache adiciona uma área de buffer de memória ao fluxo de E / S. Com a área de cache, a eficiência operacional pode ser bastante melhorada.

Por exemplo, existem dois pontos A e B. Existem mercadorias do ponto A que precisam ser movidas para o ponto B. Se o manuseio manual for usado, apenas uma mercadoria pode ser movida por vez, o que é muito ineficiente.
Insira a descrição da imagem aqui
Se mudarmos o caminho e dirigirmos um carro, se o carro for grande o suficiente, podemos carregar todas as mercadorias e transportá-las até o ponto B de uma vez, o que melhora muito a eficiência do trabalho.
Insira a descrição da imagem aqui
A função da área tampão é equivalente a este carro. O uso de fluxos de entrada / saída em cache é muito semelhante ao uso de fluxos de entrada / saída de arquivos. Os fluxos de entrada / saída em cache são aninhados em fluxos de entrada / saída de arquivos.

Por exemplo, quero ler os dados da API Java em meu desktop. O
Insira a descrição da imagem aqui
código é o seguinte:

public class Dome {
    
    

	public static void main(String[] args) {
    
    

		// 创建文件对象,文件为我位于桌面上的Java,api
		File f = new File("C:\\Users\\逢青\\Desktop\\jdk api 1.8.CHM");

		FileInputStream in = null;

		long start = System.currentTimeMillis();// 程序开始时间
		try {
    
    
			in = new FileInputStream(f);// 创建FileInputStream对象
			byte b[] = new byte[1024];// 创建byte数组储存读取的信息
			while (in.read(b) != -1) {
    
    // 循环遍历输出,读取信息

			}
			long end = System.currentTimeMillis();// 程序结束时间
			System.out.println("运行经历毫秒值:" + (end - start));
		} catch (FileNotFoundException e) {
    
    
			e.printStackTrace();
		} catch (IOException e) {
    
    
			e.printStackTrace();
		} finally {
    
    
			if (in != null) {
    
    // 判断in是否为空值,如果不是则关闭流
				try {
    
    
					in.close();// 关闭流
				} catch (IOException e) {
    
    
					e.printStackTrace();
				}
			}
		}

	}
}

Isso não está adicionando a área de cache, levou 143 milissegundos para
Insira a descrição da imagem aqui
adicionar a área de cache

public class Dome {
    
    

	public static void main(String[] args) {
    
    

		// 创建文件对象,文件为我位于桌面上的Java,api
		File f = new File("C:\\Users\\逢青\\Desktop\\jdk api 1.8.CHM");

		FileInputStream in = null;
		BufferedInputStream bi = null;

		long start = System.currentTimeMillis();// 程序开始时间
		try {
    
    
			in = new FileInputStream(f);// 创建FileInputStream对象
			bi = new BufferedInputStream(in);//创建BufferedInputStream对象
			byte b[] = new byte[1024];// 创建byte数组储存读取的信息
			while (bi.read(b) != -1) {
    
    // 循环遍历输出,读取信息

			}
			long end = System.currentTimeMillis();// 程序结束时间
			System.out.println("运行经历毫秒值:" + (end - start));
		} catch (FileNotFoundException e) {
    
    
			e.printStackTrace();
		} catch (IOException e) {
    
    
			e.printStackTrace();
		} finally {
    
    
			if(bi != null) {
    
    // 判断bi是否为空值,如果不是则关闭流
				try {
    
    
					bi.close();// 关闭流
				} catch (IOException e) {
    
    
					e.printStackTrace();
				}
			}
			if (in != null) {
    
    // 判断in是否为空值,如果不是则关闭流
				try {
    
    
					in.close();// 关闭流
				} catch (IOException e) {
    
    
					e.printStackTrace();
				}
			}
		}

	}
}

Mais da metade da melhoria da eficiência, levou 35 milissegundos
Insira a descrição da imagem aqui

BufferedReader 与 BufferedWriter 类

A maior característica dos fluxos de caracteres em buffer BufferedReader e BufferedWriter é que eles podem ter entrada / saída em unidades de comportamento

método efeito
Leia a linha() Leia uma linha de texto
nova linha() Crie uma nova linha ao escrever

Escreva um exemplo:

public class Study2 {
    
    

	public static void main(String[] args) {
    
    

		File f = new File("word.txt");// 创建文件对象

		FileWriter fw = null;
		BufferedWriter bw = null;

		try {
    
    
			fw = new FileWriter(f);// 创建FileWriter对象
			bw = new BufferedWriter(fw);// 将文件字符流包装成缓存字符流

			String str1 = "抽刀断水水更流";
			String str2 = "举杯消愁愁更愁";
			bw.write(str1);// 写入第一句话
			bw.newLine();// 创建新行,也就是换行
			bw.write(str2);// 写入第二句话

		} catch (IOException e) {
    
    
			e.printStackTrace();
		} finally {
    
    
			if (bw != null) {
    
    // 判断bw是否为空值,如果不是则关闭流
				try {
    
    
					bw.close();// 关闭流
				} catch (IOException e) {
    
    
					e.printStackTrace();
				}
			}
			if (fw != null) {
    
    // 判断fw是否为空值,如果不是则关闭流
				try {
    
    
					fw.close();// 关闭流
				} catch (IOException e) {
    
    
					e.printStackTrace();
				}
			}
		}

	}
}

Perceba a quebra de linha ao escrever. O
Insira a descrição da imagem aqui
inverso também é possível. Escreva algumas linhas no arquivo txt. Insira a descrição da imagem aqui
código mostrado abaixo:

public class Study2 {
    
    

	public static void main(String[] args) {
    
    

		File f = new File("word.txt");// 创建文件对象

		FileReader fr = null;
		BufferedReader br = null;

		try {
    
    
			fr = new FileReader(f);// 创建FileReader对象
			br = new BufferedReader(fr);// 包装FileReader对象
			String tmp = null;
			int i = 1;// 计数器
			while ((tmp = br.readLine()) != null) {
    
    // 循环读取文件中的信息
				System.out.println("第" + i + "行:" + tmp);
				i++;
			}

		} catch (FileNotFoundException e) {
    
    
			e.printStackTrace();
		} catch (IOException e) {
    
    
			e.printStackTrace();
		} finally {
    
    
			if (br != null) {
    
    // 判断br是否为空值,如果不是则关闭流
				try {
    
    
					br.close();// 关闭流
				} catch (IOException e) {
    
    
					e.printStackTrace();
				}
			}
			if (fr != null) {
    
    // 判断fr是否为空值,如果不是则关闭流
				try {
    
    
					fr.close();// 关闭流
				} catch (IOException e) {
    
    
					e.printStackTrace();
				}
			}
		}

	}
}

Captura de tela do efeito de corrida:
Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/javanofa/article/details/104477050
Recomendado
Clasificación