Java 传统 I/O(BIO)的主要流
Java 的传统 I/O,也称为阻塞式 I/O(Blocking I/O,简称 BIO),涉及读取和写入数据的各种流。可以通过一个形象的例子来说明这些流的作用和特点。
形象的例子:图书馆借阅系统
想象一个传统的图书馆,提供各种类型的书籍和杂志。这个图书馆里有几种不同的借阅方式,这些方式可以类比为 Java 中的几种主要的 I/O 流。
1. InputStream(输入流)/ Reader(字符输入流):读者从图书馆借阅书籍
-
性质:
InputStream
和Reader
是用于读取数据的流。InputStream
处理字节数据(如二进制文件),而Reader
处理字符数据(如文本文件)。- 就像读者从图书馆借书,他们从图书馆中“读取”信息。
-
形象解释:
- 你去图书馆借一本书,这就像使用
InputStream
或Reader
从数据源(如文件或网络)中读取数据。你可以通过翻阅书页(遍历流中的数据)来获取信息。
- 你去图书馆借一本书,这就像使用
2. OutputStream(输出流)/ Writer(字符输出流):读者将书籍归还图书馆
-
性质:
OutputStream
和Writer
是用于写入数据的流。OutputStream
处理字节数据,而Writer
处理字符数据。- 就像读者把书还回图书馆,他们把信息“写入”到图书馆的系统中。
-
形象解释:
- 当你把一本书还给图书馆,这就像使用
OutputStream
或Writer
向目标(如文件或网络)写入数据。你在借书的过程中获取了信息,然后通过还书的方式将信息保存或提交回系统。
- 当你把一本书还给图书馆,这就像使用
3. FileInputStream 和 FileOutputStream:读者借阅和归还具体的物理书籍
-
性质:
FileInputStream
和FileOutputStream
是用于从文件中读取和写入字节数据的流。- 它们与具体的物理文件(如一本实际的书)对应。
-
形象解释:
- 你借阅了一本实体书(
FileInputStream
),并在阅读后归还了它(FileOutputStream
)。这就像从文件中读取数据并将修改后的数据写回到文件中。
- 你借阅了一本实体书(
4. BufferedInputStream 和 BufferedOutputStream:图书馆的预借和批量归还系统
-
性质:
BufferedInputStream
和BufferedOutputStream
提供了缓冲功能,使读取和写入操作更加高效。- 就像图书馆允许读者预借一批书,或者批量归还书籍,提高了操作的效率。
-
形象解释:
- 你预先借阅了一堆书,存放在你的书包里(缓冲区),这样你在家里阅读时不需要频繁地去图书馆(减少了 I/O 操作)。当你读完后,你可以一次性归还这些书,而不是一本一本地还。
5. ObjectInputStream 和 ObjectOutputStream:图书馆的电子书籍借阅系统
-
性质:
ObjectInputStream
和ObjectOutputStream
用于读写对象,这意味着你可以直接读取或写入完整的 Java 对象,而不仅仅是字节或字符数据。- 这就像图书馆的电子书籍系统,读者可以借阅和归还完整的电子书(对象)。
-
形象解释:
- 你使用图书馆的电子系统借阅了一本电子书(
ObjectInputStream
),这本书不仅包含文字,还包含图片、格式等完整信息。阅读完后,你将这本完整的电子书归还到图书馆的系统中(ObjectOutputStream
)。
- 你使用图书馆的电子系统借阅了一本电子书(
总结
Java 的传统 I/O(BIO)方式通过不同的流来处理数据,就像在图书馆中借阅和归还书籍。InputStream
和 OutputStream
是基础的字节流,Reader
和 Writer
是处理字符的流,Buffered
类流提供了更高效的缓冲机制,而 ObjectStream
则处理更复杂的对象数据。这些流各有用途,帮助程序更好地处理各种类型的数据输入和输出。