首页 > 代码库 > 字节流

字节流

字节流用于处理二进制文件。所有字节流都继承于抽象类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字节。当读取数据源时,缓冲流会尽力将数据成员填满。