输入输出流(IO流)
字节流
- 字节流可以处理所有数据(计算机识别的是一个字节),InputStream和OutputStream是字节流的积类,能用字符流的地方都可以用字节流。
- InputStream表示字节输入流,OutputStream表示字节输出流,可以拷贝文件。
例
public class LianXi1 { public static void main(String[] args) throws Exception { //创建一个字节输入流,存放要拷贝的文件 InputStream in=new FileInputStream("D:\\kk 2017-06-13 22-28-37.avi\\"); //字节输出流,读取要拷贝的文件,地址 OutputStream out=new FileOutputStream("E:\\kk 2017-06-13 22-28-37.avi\\"); int len; //拷贝文件前的系统时间 long begintime=System.currentTimeMillis(); while((len=in.read())!=-1){ //字节写入文件 out.write( len); } //获取文件拷贝结束的系统时间 long endtime=System.currentTimeMillis(); System.out.println("拷贝文件所消耗的时间是:"+(endtime-begintime)+"毫秒"); in.close(); out.close(); } }
转换流
InputStreamReader可以将字节流转换成字符流,OutputStreamWriter可以将字符流转换成字节流,代码中用BufferedReader和BufferedWriter包装转换流来提高性能。
public class LianXi2 { public static void main(String[] args) throws Exception { //创建字节输入流 FileInputStream in=new FileInputStream("src.txt"); //将字节输入流转换成字符输入流 InputStreamReader isr=new InputStreamReader(in); //对字符流对象进行包装 BufferedReader br=new BufferedReader(isr); FileOutputStream out=new FileOutputStream("des.txt"); //将字节输入流转换成字符输入流 OutputStreamWriter osw=new OutputStreamWriter(out); BufferedWriter bw=new BufferedWriter(osw); String line; while((line=br.readLine())!=null){ bw.write(line); } br.close(); bw.close(); } }
IO流按照方向分,可以分为输入流(读取),输出流(写入)(这些都是相对于内存而言)。
按照操作数据可以分为字节流和字符流,字节流可以处理所有的数据,包含一个字节
- InputStream
- (FileinputStream,BufferedInputStream)
- OutputStream
- (FileOutputStream(avaliable),BufferdOutputStream);
- 字符流可以处理文本数据,两个字节,原理是根据两个字节去查找指定的编码表(unicode),获得相应的字符(Reader,Writer)。
- Reader(读,输入流)
- FileReader:读取基本步骤,打开文件–>读取(单个或char数组)–>关闭
*BufferReader:自带缓存
- FileReader:读取基本步骤,打开文件–>读取(单个或char数组)–>关闭
- Writer (写,输出流)
- FileWriter:写入的基本步骤打开文件–>写入缓存—>刷新缓存—>关闭文件
- BufferedWriter
- Reader(读,输入流)
- InputStream
按照功能可以分为包装流和节点流