java中的流

来源:互联网 发布:除湿袋原理 知乎 编辑:程序博客网 时间:2024/05/15 01:06

参考:http://www.cnblogs.com/pepcod/archive/2013/01/20/2913435.html

1、流的概念
流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。
一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL
流的方向是重要的,根据流的方向,流可分为两类:输入流和输出流。用户可以从输入流中读取信息,但不能写它。相反,对输出流,只能往输入流写,而不能读它。
实际上,流的源端和目的端可简单地看成是字节的生产者和消费者,对输入流,可不必关心它的源端是什么,只要简单地从流中读数据,而对输出流,也可不知道它的目的端,只是简单地往流中写数据。

2、流的分类
(1)结点流和过滤器
结点流:直接从指定位置(如磁盘文件或内存区域)读或写
过滤器:输入流的源一般是以其他输入流,经过过滤或处理后再以新的输入流的形式提供给用户;输出流的目的端一般也是其他的输出流
(2)字节流和字符流
字节流:处理的单位是字节,InputStream是左右字节输入流的祖先,outputstream是所有字节输出流的祖先
字符流:处理的单位是字符(两个字节)Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。

除了字符流和字节流之外,还存在一组字节流-字符流的转换类。
OutputStreamWriter:是Writer的子类,将字节输入流转化为字符输入流
InputStreamReader:是Reader的子类,将字节输出流转化为字符输出流

3、JAVA字节流
(1)FileInputStream和FileOutputStream
这两个类属于结点流,第一个类的源端和第二个类的目的端都是磁盘文件,它们的构造方法允许通过文件的路径名来构造相应的流。如:
FileInputStream infile = new FileInputStream(“myfile.dat”);
FileOutputStream outfile = new FileOutputStream(“results.dat”);

要注意的是,构造FileInputStream, 对应的文件必须存在并且是可读的,而构造FileOutputStream时,如输出文件已存在,则必须是可覆盖的。

(2)BufferInputStream和BufferOutputStream
它们是过滤器流,其作用是提高输入输出的效率。
(3)DataInputStream和DataOutputStream

4、JAVA字符流
字符流主要是用来处理字符的。Java采用16位的Unicode来表示字符串和字符,对应的字符流按输入和输出分别称为readers和writers。
(1)InputStreamReader和OutputStreamWriter
在构造这两个类对应的流时,它们会自动进行转换,将平台缺省的编码集编码的字节转换为Unicode字符。对英语环境,其缺省的编码集一般为ISO8859-1。
(2)BufferedReader和BufferedWriter
这两个类对应的流使用了缓冲,能大大提高输入输出的效率。这两个也是过滤器流,常用来对InputStreamReader和OutputStreamWriter进行处理。

0 0
原创粉丝点击