1.什么是流?
流是一组有顺序,有起点、终点点的字节集合,其本质是数据传输,根据数据传输特性将其抽象为各种类方便数据操作。
2.流的类结构
3.流的分类
流分为字节流与字符流,输入流与输出流
字节流与字符流
字节流:字节流一次能读入或读出8位二进制
字符流:字符流一次能读入或读出16位二进制
字节流能处理一切数据类型,字符流只能处理字符类型的数据
4.输入流与输出流
输入流只能进行读操作,输出流只能进行写操作
5.InputStream 输入流
InputStream输入流是IO流中所有输入字节流的父类,是一个抽象类
ByteArrayInputStream,FileInputStream,StringBufferInputStream分别是的三种基本的介质流,分别从byte数组,本地文件,StringBuffer中读取数据
ObjectInputStream和所有FilterInputStream的子类装饰流(例如读取以某个后缀结尾的文件)
PipedInputStream是从与其他进程共用的管道中读取数据
6.OutputStream 输出流
OutputStream输出流是IO流中所有输出流的父类,是一个抽象类
与上面的InputStream相对应,InputStream是读入,OutputStream是写出
这里说一下我理解的读入与写出
InputSream或者Reader是读入操作就是将数据读入内存中,OutputStream或Writer是写出操作就是将内存中的数据写出
这里我是以内存作为参照物
7.节点流
节点流直接与数据相连,读入或写出
父类:InputStream,OutputStream,Reader,Writer
文件:FileInputStream,FileOutputStream,FileReader,FileWriter(对文件进行处理的节点流)
数组:ByteArrayInputStream,ByteArrayOutputStream,CharArrayReader,CharArrayWriter(对数组进行处理的节点流)
字符串:StringReader,StringWriter(对字符串处理的节点流)
管道:PipedInputStream,PipedOutputStream,PipedReader,PipedWriter(对管道处理的节点流)
8.处理流
处理流要和节点流一起使用,将节点流包装在处理流中
常用的处理流
缓冲流:BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter(使用缓冲流可避免频繁读写磁盘)
转换流:InputStreamReader,OuputStreamWriter(实现字节与字符的转换)
数据流:DataInputStream,DateOutputStream(将基础数据类型写到文件或读取出来)
9.综合输入输出流实现文件的复制
1 package IO; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileNotFoundException; 6 import java.io.FileOutputStream; 7 8 //文件复制 9 public class CopyFile {10 11 public static void main(String[] args) {12 // TODO Auto-generated method stub13 String old_path = "E:" + File.separator + "newWorkSpace" + 14 File.separator + "tmp" + File.separator + "new.txt";15 String new_path = "E:"+File.separator+"newWorkSpace"+16 File.separator+"new.txt";17 copyFile(old_path, new_path);18 }19 20 public static void copyFile(String old_file, String new_file) {21 22 FileInputStream fis = null;23 FileOutputStream fos = null;24 try {25 fis = new FileInputStream(old_file);26 int size = fis.available();//27 byte b []= new byte[size];28 // 将输入流内容以字节的方式读到数组中29 fis.read(b);30 fos = new FileOutputStream(new_file);31 // 将数组的内容写到输出流中32 fos.write(b);33 } catch (Exception e) {34 // TODO Auto-generated catch block35 e.printStackTrace();36 }37 }38 }