首页 > 代码库 > 字节流
字节流
字节流用于处理二进制文件。所有字节流都继承于抽象类InputStream和OutputStream两个父类。其中InputStream为读取字节流的父类,OutputStream为写入字节流的父类。对字节流可以进行分类,分为:低级字节流和高级字节流。1.低级字节流:包括,对二进制文件读写操作的FileputStream和FileOutputStream类,其数据源是磁盘文件。对内存缓冲区的字节数组进行读写操作的ByteArrayInputStream和ByteArrayOutputStream类,其数据源是内存中的字节数组。对线程管道进行读写操作的PipedInputStream和FileOutputStream类,其数据源是线程管道。而其中最常用的是FileInputStream和FileOutputStream。当建立一个FileOInputStream或FileOutputStream的实例时,必须指定文件位置及文件名称,实例被建立时文件的流就会开启,而不使用流时,必须关闭文件流,以释放与流相依的系统资源,完成文件读或写的动作。FileInputStream可以使用read()方法一次读入一个字节,并返回整型值,或者是使用()方法时读入到一个byte数组,byte数组的元素有多少个,就读入多少个字节。在将整个文件读取完成或写入完毕的过程中,这么一个byte数组通常被当做缓冲区,因为这么一个byte数组通常扮演承接数据的中间角色。代码如下:
1 FileInputStream in = null; //创建文件输入流 2 3 FileOutputStream out = null; //创建文件输出流 4 5 in = new FileInputStream("c:\\abc.txt"); //创建文件的输入路径 6 out = new FileOutputStream("c:\\abc.txt"); 7 int c; 8 while ((c = in.read()) != -1) { //当输入流里还有东西时,就一直写入 9 out.write(); 10 } //有异常 11 finally { 12 if(in != null) { //关闭输入流 13 System.out.println("关闭不了文件abc.txt"); 14 } 15 if(out != null) { //关闭输出流 16 System.out.println("关闭不了文件abc.txt"); 17 } 18 //有异常 19 20 }
高级字节流:高级字节流对低级字节流进行了封装,并有许多功能的扩展。高级字节流根据其功能分为三大类:过滤流类:包括,BufferedInputStream和BufferedOutputStream;数据流:DataInputStream和DataOutputStream,可以用与计算机无关的格式读写java的基本数据类型以及String对象。对象流:包括ObjectInputStream和ObjectOutputStream,允许直接对对象执行读写操作。 因为高级流不能直接与数据源进行通讯,所以使用时不能单独使用,必须附加在一个已经存在的低级流或高级流上。也就是必须用一个已经存在的流作为它的构造器参数。字节缓冲流:BufferedInputStream与BufferedOutputStream可以为InputStream,OutputStream类的对象增加缓冲区功能。创建缓冲流时,需要给定一个InputStream或OutputStream类型的实例。实现缓冲流时其实最后实现的是InputStream或OutputStream实例。BufferedInputStream的数据成员是一个字节数组,默认为2048字节。当读取数据源时,缓冲流会尽力将数据成员填满。