关于Java高级文件字节缓冲流和字符缓冲流
作者:互联网
字节缓冲输入流 BufferedInputStream 和字节缓冲输出流 BufferedOutputStream
private static void copy04() { long startTime = System.currentTimeMillis(); try ( // 1、创建低级的字节输入流与源文件接通 InputStream is = new FileInputStream(SRC_FILE); // a.把原始的字节输入流包装成高级的缓冲字节输入流 InputStream bis = new BufferedInputStream(is); // 2、创建低级的字节输出流与目标文件接通 OutputStream os = new FileOutputStream(DEST_FILE + "video4.avi"); // b.把字节输出流管道包装成高级的缓冲字节输出流管道 OutputStream bos = new BufferedOutputStream(os); ) { // 3、定义一个字节数组转移数据 byte[] buffer = new byte[1024]; int len; // 记录每次读取的字节数。 while ((len = bis.read(buffer)) != -1){ bos.write(buffer, 0 , len); } } catch (Exception e){ e.printStackTrace(); } long endTime = System.currentTimeMillis(); System.out.println("使用缓冲的字节流按照一个一个字节数组的形式复制文件耗时:" + (endTime - startTime)/1000.0 + "s"); }
字符缓冲输入流 BufferedReader
try ( // 1、创建一个文件字符输入流与源文件接通。 Reader fr = new FileReader("io-app2/src/data01.txt"); // a、把低级的字符输入流包装成高级的缓冲字符输入流。 BufferedReader br = new BufferedReader(fr); ){ String line; while ((line = br.readLine()) != null){ System.out.println(line); } } catch (IOException e) { e.printStackTrace(); }
字符缓冲输入流 BufferedWriter
// 1、创建一个字符输出流管道与目标文件接通 Writer fw = new FileWriter("io-app2/src/out02.txt"); // 覆盖管道,每次启动都会清空文件之前的数据 //Writer fw = new FileWriter("io-app2/src/out02.txt", true); // 追加数据 BufferedWriter bw = new BufferedWriter(fw); // a.public void write(int c):写一个字符出去 bw.write(98); bw.write('a'); bw.write('徐'); // 不会出问题了 bw.newLine(); // bw.write("\r\n"); // 换行 // b.public void write(String c)写一个字符串出去 bw.write("abc我是中国人"); bw.newLine(); // bw.write("\r\n"); // 换行 // c.public void write(char[] buffer):写一个字符数组出去 char[] chars = "abc我是中国人".toCharArray(); bw.write(chars); bw.newLine(); // bw.write("\r\n"); // 换行 // d.public void write(String c ,int pos ,int len):写字符串的一部分出去 bw.write("abc我是中国人", 0, 5); bw.newLine(); // bw.write("\r\n"); // 换行 // e.public void write(char[] buffer ,int pos ,int len):写字符数组的一部分出去 bw.write(chars, 3, 5); bw.newLine(); // bw.write("\r\n"); // 换行 // fw.flush();// 刷新后流可以继续使用 bw.close(); // 关闭包含刷线,关闭后流不能使用 }
代码与文件编码不一致读取乱码的问题、转换流来解决
转换流 InputStreamReader OutputStreamWriter 属于分别继承了 Reader、Writer
InputStream is = new FileInputStream("D:\\resources\\data.txt"); // 2、把原始字节流转换成字符输入流 // Reader isr = new InputStreamReader(is); // 默认以UTF-8的方式转换成字符流。 还是会乱码的 跟直接使用FileReader是一样的 Reader isr = new InputStreamReader(is , "GBK"); // 以指定的GBK编码转换成字符输入流 完美的解决了乱码问题 BufferedReader br = new BufferedReader(isr); String line; while ((line = br.readLine()) != null){ System.out.println(line); }
// 1、定义一个字节输出流 OutputStream os = new FileOutputStream("io-app2/src/out03.txt"); // 2、把原始的字节输出流转换成字符输出流 // Writer osw = new OutputStreamWriter(os); // 以默认的UTF-8写字符出去 跟直接写FileWriter一样 Writer osw = new OutputStreamWriter(os , "GBK"); // 指定GBK的方式写字符出去 // 3、把低级的字符输出流包装成高级的缓冲字符输出流。 BufferedWriter bw = new BufferedWriter(osw); bw.write("我爱中国1~~"); bw.write("我爱中国2~~"); bw.write("我爱中国3~~"); bw.close();
标签:字符,Java,字节,缓冲,write,bw,new 来源: https://www.cnblogs.com/lwsgigigi/p/16198587.html