1、节点流可以从一个特定的数据源读写数据,如FileReader、FileWriter
2、处理流(也叫包装流)是“连接”在已存在的流(节点流或处理流)之上,为程序提供更为强大的读写功能,如BufferedReader、BufferedWriter
3、关闭处理流时,只需要关闭外层流即可(关闭处理流时系统自动关闭节点流)
二者区别:
1、节点流是底层流/低级流,直接跟数据源相接
2、处理流包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出
3、处理流对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连
处理流的功能主要体现在以下两个方面:
1、性能的提高:主要以增加缓冲的方式来提高输入输出的效率
2、操作的便捷:处理流提供了一系列便捷的方法来一次输入输出大批量的数据,使用更加灵活
字符处理流:
BufferedReader:
public class Study {
@SuppressWarnings({"all"})
public static void main(String[] args) throws Exception{
String filePath = "d:\\hello.txt";
BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
String line;
//bufferedReader.readLine()按行读取
while ((line = bufferedReader.readLine()) != null){
System.out.println(line);
}
bufferedReader.close();//底层会调用FileReader.close()
}
}
BufferedWriter:
public class Study {
@SuppressWarnings({"all"})
public static void main(String[] args) throws Exception {
String filePath = "d:\\hello.txt";
//如果想要追加,则在创建节点流处设置为true
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath,true));
bufferedWriter.write("hello");
bufferedWriter.newLine();//换行
bufferedWriter.write("hi");
bufferedWriter.close();
}
}
字节处理流:
BufferedInputStream:
BufferedOutputStream:
public class Study {
@SuppressWarnings({"all"})
public static void main(String[] args) throws Exception {
String srcPath = "C:\\Users\\86150\\Desktop\\ps\\初音未来.png";
String destPath = "d:\\初音未来.png";
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(srcPath));
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(destPath));
byte[] readbuff = new byte[1024];
int readLen;
while ((readLen = bufferedInputStream.read(readbuff)) != -1){
bufferedOutputStream.write(readbuff,0,readLen);
}
bufferedInputStream.close();
bufferedOutputStream.close();
System.out.println("拷贝完成~~");
}
}