您的位置:首页 > 编程语言 > Java开发

JAVA IO流详解

2016-06-28 19:31 483 查看
根据IO对数据处理类型的不同,分为字节流和字符流,根据数据的流向分为输入流和输出流,JAVA IO流类图如下:



(1)、字符流和字节流的区别:

首先JAVA中字符流是Reader、Writer结尾的,字节流是Stream结尾的。字符流是根据数据编码的不同,对字符进行操作的流对象,其本质是根据字节流操作后,再去查询相关的编码表,

a、操作单位不同:字节流是以字节8bits为单位,而字符可能操作多个字节。

b、操作的数据类型不同:字节流可以操作所有的数据类型,而字符流只能处理纯文本类型的数据。

(2)节点流类型:节点流就是直接操作源数据,典型的节点流就是操作文件流,如:文件的字节输入流(FileInputStream),





(3)、处理流:

该类型的流是对一个已经存在的流进行包装, 处理流的构造方法中带有另一个流对象作为参数。也就是,包在别的流上得流。

a、缓冲流:BufferedInPutStream 、BufferedOutPutStream和BufferedWriter、BufferedReader,这是提高效率的。写入缓冲区对象:

BufferedWriter bw = new BufferedWriter(new
FileWriter("buf.txt"));

BufferedInput bufferedInput =
new BufferedInputStream(new FileInputStream(“buf.txty”));

该类型的流有一个readLine()方法;一次读取一行,读到行标记时,将之前读到的数据作为一个字符串返回,当读到文件结尾时,返回null, 其原理还是利用缓冲区流对象的read()方法,只不过每次读到一个字符(字节)先不进行操作,先进行临时存储,当读到回车时,将临时存下了的数据一次返回。

b、转换流:InputStreamReader、OutputStreamWriter

该类型主要是为了在字符类流和字节流之间的转换桥梁,该流对象可以对读到的字节数据可以进行指定编码的编码转换。

该流的构造函数如下:

InputStreamReader(InputStream);//字符到字节流的转换,带有字节流inputStream,采用系统默认的编码表GBK

InputStreamReader(InputStream ,String charSet)//制定编码表

OutputStreamWriter(OutputStream);

OutputStreamWriter(OutputStream,String charSet);

   注意:在使用FileReader操作文本数据时,该对象使用的时默认的编码表,即
                   FileReader fr=new FileReader(“a.txt”);      与     InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt"));   的意义相同。如果要使用指定表编码表时,必须使用转换流,即如果a.txt中的文件中的字符数据是通过utf-8的形式编码,那么在读取时,就必须指定编码表,那么转换流时必须的。即:
                   InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt"),utf-8);
c、数据流:DataInputStream ,DateOutputStream

该流可以对一些基本的数据类型进行直接存取和读写,不需要进一步转换, 

d、打印流:printStream,printWriter

printStream字节打印, system.out对应的类型就是printStream,

e、对象流 ObjectInputStream ,ObjectoutputStream,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息