1 什么是高级流?
在 Java 中,IO 流中最基本的是 FileOutputStream,FileInputStream,FileReader,FileWriter,这些流相对来说比较慢,在 Java 中提供了更加强大流处理,缓冲流、转换流
2 代码实践
2.1 字节缓冲流
BufferedInputStream 和 BufferedOutputStream,缓冲区大小 8192 字节(8KB)
package cn.edu.njust.iostreambuffer;
import java.io.*;
public class BufferedStreamDemo01 {
public static void main(String[] args) throws Exception {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("./src/main/resources/files/buffer01.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("./src/main/resources/files/copy_buffer01.txt"));
int code;
while((code = bis.read()) != -1) {
bos.write(code);
}
bos.close();
bis.close();
}
}
2.2 字符缓冲流
package cn.edu.njust.iostreambuffer;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedStreamDemo02 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("./src/main/resources/files/buffer02.txt"));
// readLine() BufferedReader中特有的方法
String line = br.readLine();
System.out.println(line);
// 这里的判断条件是 null
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
}
}
package cn.edu.njust.iostreambuffer;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedStreamDemo03 {
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter("./src/main/resources/files/buffer03.txt"));
String str = "事情没有做成的人老有这类根据不充分的信念;我们对采摘不到的葡萄,不但想象它酸,也很可能想象它是分外地甜。";
bw.write(str);
// 特有的换行
bw.newLine();
bw.write(str);
bw.close();
}
}
2.3 转换流
package cn.edu.njust.iostream;
import java.io.*;
import java.nio.charset.Charset;
/**
* 将本地的一个GBK编码的文件转换成UTF-8编码的文件
* 体验转换流的使用
*/
public class ConvertStreamDemo01 {
public static void main(String[] args) throws Exception {
/*
* 这是JDK11之前的方式
* JDK11之后,有新的替代方案
* */
// 输入流,将字节转换为字符
InputStreamReader isr = new InputStreamReader(new FileInputStream("./src/main/resources/files/转换流GBK.txt"),"GBK");
// 输出流,将字符转换为字节
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("./src/main/resources/files/GBK_to_UTF-8.txt"),"UTF-8");
int code;
while ((code = isr.read()) != -1) {
osw.write(code);
}
osw.close();
isr.close();
/*
* JDK11之后的写法
*
* */
FileReader fr = new FileReader("./src/main/resources/files/转换流GBK.txt", Charset.forName("GBK"));
FileWriter fw = new FileWriter("./src/main/resources/files/GBKtoUTF-8.txt");
int code1;
while ((code1 = fr.read()) != -1) {
fw.write(code1);
}
fw.close();
fr.close();
}
}
3 常用方法汇总
3.1 字节缓冲流
和基本流的使用方法基本一致
3.2 字符缓冲流
有两个特有的方法
方法 | 解释 |
---|---|
public String readLine() | 一次读一行 |
public void newLine() | 提供一个换行,避免不同炒作系统的换行符不同 |