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

Java中IO的相关操作——节点流的知识

2011-09-03 12:47 337 查看
1.流的概念

a) 流是字节序列的抽象概念。

b) 文件是数据的静态存储形式,而流是指数据传输时的形态。

c) 流是:字节序列的抽象概念,数据传输的一种数据序列。提供了一种统一的方式向IO设备中读取和写入的方式。

d) 文件是:一些具有永久存储,有序的具有名称的字节的集合。文件是流可操作的IO设备之一。除了文件流,还有内存流,网络流,磁带流……

e) 流类分为两大类:节点流类和过滤流类(也叫处理流类)。

f) 节点流:用于直接操作目标设备所对应的流类。节点流类所对应的IO源或目标称为流节点。比如我们用一个类和一个文件或网络相关联,那么这个类就叫做节点流类,这个文件或网络就叫做流的节点。

g) 过滤流:使用节点流作为输入或输出。过滤流是使用一个已经存在的输入流或输出流连接创建的。

2.InputStream类

a) 程序可以从中连续读取字节的对象叫输入流,在java中,用InputStream类来描述所有输入流的抽象概念。

b) int read() 1.如果读取结束返回-1.2.如果没有结束,但是暂时也没有数据可读,read方法将阻塞,直到有数据可读。

3.OutputStream类

a) 此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发 送到某个接收器。

b) void flush()方法:刻骨铭心的记忆: 刷新此输出流并强制写出所有缓冲的输出字节。

4.FileInputStream 与 FileOutputStream类

a) FileInputStream 和 FileOutputStream 类分别用来创建磁盘文件的输入流和输出流对象,通过他们的构造函数来指定文件路径和文件名。

b) 创建FileOutputStream实例对象时,指定的文件应当是存在和可读的。

c) 创建FileOutputStream实例对象时,可以指定不存在的文件名(如果指定的文件已经存在,这个文件的原来内容将被覆盖清除。如果不存在,将创建一个新的文件),但是不能指定一个 被其他程序打开了的文件。

思考题:要将A文件的内容写入B文件,在程序代码中,是用输出类对象,还是用输入类对象来连接A文件并完成对A文件的操作呢?

答:输入和输出的概念多是相对于程序而言的,并不是文件。我们要从A文件中读取信息写入程序中,所以应该用文件输入流FileInputStream。

5.Reader 与 Writer(FileReader和FileWriter)

a)——————以上都是处理字节的,需要字节与字符的转化——————

Reader 和 Writer是所有字符流的抽象基类,用于简化对字符的输入输出编程,即用于读写文本数据。

用Reader和Writer类就可以直接进行字符串读取,简化了字符串的输入输出编程。但他们都是抽象类,用他们的子类FileReader、FileWriter就可以直接使用。

b) 文本文件只是二进制文件的一种特例。

c) 如果一个文件只存储了字符我们就称作是文本文件。

d) FileReader的Writer方法内部没有调用Flush()(刷新)方法将缓存中的信息写入硬盘,需要调用close方法才能真正的写入到硬盘中。

6.PipedInputStream与PipedOutputStream类(管道流类)

a) PipedInputStream类与PipedOutputStream类用于在应用程序中创建管道通信。

b) PipedInputStream管道对象用来接收PipedOutputStream管道对象所输出的信息。

c) 实际编程中要建立两个管道,相互连接。

7.PipedWriter和PipedReader字符文本的管道通信

a) 使用管道流类,可以实现各个程序模块之间的高内聚低偶合的通信。

8.ByteArrayInputStream与ByteArrayOutputStream

a) 内存虚拟文件,内存映像文件,都是把内存中的数据缓存区虚拟成一个文件,原来应该写入到硬盘文件的内容,可以写入内存中。原来应该从硬盘文件中读取的内容,也可以从内存中读取。这样可以大大提高应用程序的性能和效率。

b) 要在内存中定义一个大的数据缓冲区,其实就是定义一个字节数组。

c) 在Java中定义了ByteArrayInputStream和ByteArrayOutputStream,用于以IO流的方式来完成对字节数组内容的读写,来支持类似内存虚拟文件或者内存映像文件的功能。

9. StringReader类和StringWriter类来以字符IO流的方式处理字符串

重视IO程序代码的复用性

a) Sytem.in连接到键盘,是InputStream类型的实例对象。System.out连接到显示器,是PrintStream类的实例对象。

b) 不管各种底层物理设备用什么方式实现数据的终止点,InputStream的read方法总是返回-1来表示输入流的结束。

c) 在Windows下,按下Ctrl+Z组合键可以产生键盘输入流的结束标记,在Linux下,则是按下Ctrl+D组合键来产生键盘输入流的结束标记。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: