IO流

来源:互联网 发布:windows rt刷安卓 编辑:程序博客网 时间:2024/06/03 23:05

IO流的分类

根据处理数据类型的不同分为:字符流和字节流

根据数据流向不同分为:输入流和输出流

字符流和字节流

字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。字节流和字符流的区别:

(1)读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。

(2)处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。

(3)字节流在操作的时候本身是不会用到缓冲区的,是文件本身的直接操作的;而字符流在操作的时候下后是会用到缓冲区的,是通过缓冲区来操作文件,我们将在下面验证这一点。

结论:优先选用字节流。首先因为硬盘上的所有文件都是以字节的形式进行传输或者保存的,包括图片等内容。但是字符只是在内存中才会形成的,所以在开发中,字节流使用广泛。

输入流和输出流

对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。

Java IO流对象

1. 输入字节流InputStream

定义和结构说明:

从输入字节流的继承图可以看出:

InputStream 是所有的输入字节流的父类,它是一个抽象类。

ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。PipedInputStream 是从与其它线程共用的管道中读取数据,与Piped 相关的知识后续单独介绍。

ObjectInputStream 和所有FilterInputStream的子类都是装饰流(装饰器模式的主角)。意思是FileInputStream类可以通过一个String路径名创建一个对象,FileInputStream(String name)。而DataInputStream必须装饰一个类才能返回一个对象,DataInputStream(InputStream in)。如下图示:

加载中...


实例操作演示:

/**
 * 字节流
 * 读文件内容
 * */
importjava.io.*;
classhello{
   publicstatic void main(String[] args) throwsIOException {
       String fileName="D:"+File.separator+"hello.txt";
       File f=newFile(fileName);
       InputStream in=newFileInputStream(f);
       byte[] b=newbyte[1024];
       in.read(b);
       in.close();
       System.out.println(newString(b));
    }
}
【案例】读取文件内容

/**
 * 字节流
 * 读文件内容
 * */
importjava.io.*;
classhello{
   publicstatic void main(String[] args) throwsIOException {
       String fileName="D:"+File.separator+"hello.txt";
       File f=newFile(fileName);
       InputStream in=newFileInputStream(f);
       byte[] b=newbyte[1024];
       intlen=in.read(b);
       in.close();
       System.out.println("读入长度为:"+len);
       System.out.println(newString(b,0,len));
    }
}

原创粉丝点击