java-IO流-缓冲流
缓冲字节流
可提高字节流读取数据的性能
public class CopyDemo1 {public static void main(String[] args) {//缓冲字节流的使用//源文件:C:\Users\hanyue\Pictures\pixiv\saber.jpg//目标文件:C:\Users\hanyue\Pictures\图片\saber_copy.jpg(复制过去时必须带文件名,无法自动生成文件名)copyFile("C:\\Users\\hanyue\\Pictures\\pixiv\\saber.jpg", "C:\\Users\\hanyue\\Pictures\\图片\\saber_copy.jpg");}//复制文件public static void copyFile(String srcPath, String destPath){//1、创建一个文件字节输入流管道与源文件接通try( //只能放资源对象,用完后会自动调用close方法自动关闭InputStream fis = new FileInputStream(srcPath);//把低级的字节输入流转换成高级的缓冲字节输入流InputStream bis = new BufferedInputStream(fis);OutputStream fos = new FileOutputStream(destPath);//把低级的字节输出流转换成高级的缓冲字节输出流OutputStream bos = new BufferedOutputStream(fos);) {//2、定义一个字节数组,每次读取多个字节byte[] buffer = new byte[1024];int len;while ((len = bis.read(buffer)) != -1) {//3、把读取到的字节写入到文件中bos.write(buffer, 0, len);//读取多少个字节,写入多少个字节}System.out.println("复制完毕!");} catch (IOException e) {e.printStackTrace();}}
}
缓冲字符流
BufferedReader缓冲字符输入流
public class BufferedReaderDemo1 {public static void main(String[] args) {//缓冲字符输入流读取字符内容:性能提升,多了按照行读取文本的能力try (Reader fr = new FileReader("product\\src\\chunqiuchan.txt");//创建一个缓冲字符输入流包装低级的字符输入流BufferedReader br = new BufferedReader(fr);) {//2、定义一个字符数组,每次读多个字符/*char[] buffer = new char[1024];int len;//记录每次读了多少个字符while ((len = br.read(buffer)) != -1) {//3、把读取的字符写入到文件中String s = new String(buffer, 0, len);System.out.print(s);}*//*System.out.println(br.readLine());System.out.println(br.readLine());System.out.println(br.readLine());System.out.println(br.readLine());System.out.println(br.readLine());*///使用循环改进,按行读取数据//定义字符串变量记住每次读取的一行数据String line;while ((line = br.readLine()) != null) {System.out.println(line);}//目前读取文本最好的方案:性能好,不乱码,按行读取}catch (Exception e) {e.printStackTrace();}}
}
BufferedWriter缓冲字符输出流
public class BufferedWriterDemo1 {public static void main(String[] args) {//缓冲字符输出流的使用:提升字符输出流的写数据的性能,多了换行功能//1、创建字符输出流对象与源文件接通try (Writer fw = new FileWriter("product\\src\\wenzhenren.txt");//覆盖管道//Writer fw = new FileWriter("product\\src\\wenzhenren.txt", true);//追加管道//创建缓冲字符输出流对象,把字符输出流作为构造参数传给缓冲字符输出流对象BufferedWriter bw = new BufferedWriter(fw);) {//2、写一个字符 public void write(int c)bw.write('a');bw.write(98);bw.write('文');bw.newLine();//换行//3、写一个字符串 public void write(String s)bw.write("永生飘渺非我求");//4、写一个字符串的子串 public void write(String s, int pos, int len)bw.write(",长生无为老愧羞", 0, 3);//5、写一个字符数组 public void write(char[] cbuf)char[] chars = "无为老愧羞".toCharArray();bw.write(chars);bw.newLine();//6、写一个字符数组的一部分 public void write(char[] cbuf, int pos, int len)bw.write(chars, 2, 3);bw.newLine();//bw.flush();//刷新缓冲区//刷新后,流可以继续使用//bw.close();//关闭资源,关闭包含了刷新,关闭后流不能再使用}catch (Exception e) {e.printStackTrace();}}
}