1 /* 2 * To change this license header, choose License Headers in Project Properties. 3 * To change this template file, choose Tools | Templates 4 * and open the template in the editor. 5 */ 6 package InputStream; 7 8 import java.io.BufferedInputStream; 9 import java.io.BufferedOutputStream; 10 import java.io.File; 11 import java.io.FileInputStream; 12 import java.io.FileOutputStream; 13 14 /** 15 * 16 * @author steven 17 */ 18 /* 19 IO 体系 20 字节流练习 21 InputStream 字节输入流为抽象接口 ,不能直接创建对象,可以通过其子类 FileInputStream来创建对象 22 格式为: InputStream is = new FileInputStream("文件路径"); 23 或者:FileInputStream fis = new FileInputSteam("文件路径"); 24 如果想提高效率,可以使缓冲流来包装,格式为: 25 BufferedInputStream bis = new BufferedInputStream(fis); 26 这种模式称为装修设计模式 27 OutputStream 字节输出流,也为抽象接口,不能直接创建对象,可以通过其子类FileOutputStream来创建对象 28 格式为:OutputStream os = new FileOutputStream("文件路径"); 29 或者 FileOutputStream fos = new FileOutStream("文件路径"); 30 如果向提高效率,可以使用高效缓冲流包装 31 格式为:BufferedOutputStream bos = new BufferedOutputStream(fos); 32 33 */ 34 public class InputStream_01 { 35 public static void main(String[] args) throws Exception { 36 File file = new File("c:\\test\\1.txt");//关联文件 37 FileInputStream fis = new FileInputStream(file);//创建字节输入流 38 BufferedInputStream bis = new BufferedInputStream(fis);//升级为高速缓冲输入流 39 40 File copyfile = new File("c:\\copy.txt");//关联新的复制文件 41 FileOutputStream fos = new FileOutputStream(copyfile);//创建字节写出流 42 BufferedOutputStream bos = new BufferedOutputStream(fos);//升级为高速缓冲写出流 43 44 byte[] buf = new byte[1024];//创建1kb的读取缓冲数组; 45 int len ; 46 while((len = bis.read(buf)) != -1){//读取内容记录在buf数组中; 47 bos.write(buf, 0, len);//带字符数组缓冲的高效写出流,格式为buf.write(buf,0,len) 48 //其中buf为缓冲数组,BufferedOutputStream本身具有8Kb的缓冲大小 49 //每一将数组中1kb的数据加载到8Kb的缓冲区中,待到8kb缓冲区全部装满后 50 //系统会自动的将缓冲区的8kb内容一次性全部刷新到磁盘文件中; 51 //0为写入的开始,len为写入的长度,范围为(0-len)包括0不包括len 52 bos.flush();//字节流不一定非要写刷新,但是在结束虚拟机之前一定要关闭缓冲流的写出, 53 bos.close();//否则写出的文件不能被写入到本地磁盘中,会被当做垃圾被虚拟机回收! 54 //System.out.print(new String(buf,0,len)); 55 } 56 } 57 58 59 60 61 }