字节输出流不会进过内存缓冲区进行数据的暂存,而是直接与目标介质进行输出控制,所有的字符流都需要经过内存处理后才可以实现(可以通过flush()方法强制刷新内存缓存区,实现输出)。实际上大部分的 IO操作都可以通过字节流的方式来完成,但是如果要是在中文的处理上,首选的一定是字符流。
五大类完整继承逻辑:
文件拷贝代码:
package hxw.io; import java.io.*; /** * @Description: * @Author: huangxunwei * @Date: 2022/3/28 13:05 */ /* 文件拷贝 */ interface ICopy{ public long Copy() throws IOException; } class CopyUtil implements ICopy{ private File inFile;//输入文件路径 private File outFile;//输出文件路径 public CopyUtil(String args[]){ if(args.length!=2){ System.out.println("拷贝程序命令输入不足,无法拷贝"); System.exit(1);//程序异常 退出程序 } this.inFile=new File(args[0]);//初始化inFile this.outFile=new File(args[1]);//初始化outFile } public CopyUtil(String inPath,String outPath){//双参构造 this.inFile=new File(inPath); this.outFile=new File(outPath); } public long Copy() throws IOException {//copy方法实现 long start=System.currentTimeMillis(); InputStream input=null;//字节输入流 保存的也是路径inFile OutputStream output=null;//字节输出流 保存的也是路径outFile try { input=new FileInputStream(this.inFile);//保存的是路径inFile output=new FileOutputStream(this.outFile);//保存的是路径outFile byte data[]=new byte[2048];//每次拷贝的字节个数, int len=0;//保存每次拷贝长度 while ((len=input.read(data))!=-1){//input.read(data)赋值给int类就是拷贝的字节数,当拷贝完就是-1; output.write(data,0,len);//data设置的意义就在于此,设置每次拷贝的字节个数 } } finally { if(input!=null){ input.close(); } if (output!=null){ output.close(); } } long end=System.currentTimeMillis(); return end-start; } } public class demo328 { public static void main(String[] args) throws IOException { System.out.println(new CopyUtil(args).Copy()); } }