- 节点流和处理流的区别和练习
- 节点流是底层流/低级流,直接和数据源相接。
- 处理流(包装流)包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出。
- 处理流(也叫包装流)对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连。
- 处理流的功能主要体现在:
- 性能的提高,主要以增强缓冲的方式来提高输入输出的效率
- 操作的边界,处理流可能提供了一系列便捷方法来一次输入输出大批量的数据,使用更加灵活。
节点流(字节流)实现文件的拷贝:
package copy_;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @author Yhj
* @date 2022/4/29 21:22
* @project IO
*/
public class FileCopy {
public static void main(String[] args) throws IOException {
//源文件
String srcfilePath = "E:\\A.png";
//目标文件
String destfilePath = "D:\\b.png";
//文件输入流
FileInputStream fileInputStream = null ;
//文件输出流
FileOutputStream fileOutputStream = null ;
try {
fileInputStream = new FileInputStream(srcfilePath);
fileOutputStream = new FileOutputStream(destfilePath);
//一次读这么多
byte[] buf = new byte[1024];
int readLen = 0;
while((readLen=fileInputStream.read(buf))!= -1){
//边读边写
fileOutputStream.write(buf);
}
System.out.println("拷贝成功");
} catch (IOException e) {
e.printStackTrace();
} finally {
if(fileInputStream!=null){
fileInputStream.close();
}
if(fileOutputStream!=null){
fileOutputStream.close();
}
}
}
}
处理流(字符流)实现文件的拷贝:
public class BufferedCopy {
public static void main(String[] args) throws IOException {
String srcFile = "E:\\b.txt";
String desFile = "D:\\good.text";
String s=null;
BufferedReader bufferedReader = new BufferedReader(new FileReader(srcFile));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(desFile));
while((s=bufferedReader.readLine())!=null){
bufferedWriter.write(s);
bufferedWriter.newLine();
}
bufferedReader.close();
bufferedWriter.close();
}
}
处理流(字节流)实现文件的拷贝:
public class Buffer_Stream_Copy {
public static void main(String[] args) throws IOException {
String srcFile = "E:\\A.png";
String desFile = "D:\\B.png";
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(desFile));
int x;
byte[] c = new byte[1024];
while ((x = bufferedInputStream.read()) != -1) {
bufferedOutputStream.write(c);
}
bufferedInputStream.close();
bufferedOutputStream.close();
}
}