彻底明白java中的IO流

Java的核心库java.io提供了全面的IO接口,包括:文件读写,标准设备输出等等。Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。在具体使用中很多初学者对Java.io包的使用非常含糊,本文将详细解说关于Java.io的使用………… Java中的IO流是Java核心库java.io中的关键组成部分,它为程序提供了与外部资源交互的能力,包括文件读写、标准设备输入输出等。Java的IO流机制基于流的概念,流可以被视为数据传输的通道,数据按照序列化的方式从输入流读取或向输出流写入。 1. **输入流(Input Stream)与输出流(Output Stream)** 输入流用于从数据源读取数据,而输出流则用于向目标位置写入数据。Java提供两类基本的流:以字节为导向的流和以Unicode字符为导向的流。 - **以字节为导向的流**: - 输入流:例如,`ByteArrayInputStream`从内存缓冲区读取,`StringBufferInputStream`从字符串读取,`FileInputStream`用于读取文件,`PipedInputStream`用于线程间的通信,`SequenceInputStream`合并多个输入流。 - 输出流:包括`ByteArrayOutputStream`写入内存缓冲区,`FileOutputStream`写入文件,`PipedOutputStream`用于线程间通信,以及`SequenceOutputStream`合并多个输出流。 - **以Unicode字符为导向的流**: - 输入流:如`CharArrayReader`从字符数组读取,`StringReader`从字符串读取,`FileReader`从文件读取,`PipedReader`用于线程间通信。 - 输出流:包括`CharArrayWriter`写入字符数组,`FileWriter`写入文件,`PipedWriter`用于线程间通信。 两者之间的转换可以通过`InputStreamReader`和`OutputStreamReader`实现,它们分别用于将字节流转换为字符流,反之亦然。 2. **Stream的扩展与属性添加** Java的IO流设计允许通过`FilterInputStream`和`FilterOutputStream`的子类为流添加额外的属性或功能。例如,如果要先将数据缓存到内存,然后再写入文件,直接使用`FileOutputStream`无法实现这个需求。这时,可以使用`BufferedOutputStream`作为`FileOutputStream`的包装,它提供了一种缓存机制,允许先写入内存,再批量写入文件。 还有其他过滤流,如`DataInputStream`和`DataOutputStream`,它们提供了读写基本数据类型的便捷方法;`GZIPOutputStream`和`GZIPInputStream`支持GZIP压缩;`ObjectInputStream`和`ObjectOutputStream`处理对象的序列化和反序列化。 3. **流的层次结构** Java的IO流形成了一个丰富的层次结构,每个流类都有特定的用途。例如,`FileInputStream`和`FileOutputStream`是最底层的流,直接操作文件系统。而`BufferedInputStream`和`BufferedOutputStream`作为过滤流,增加了缓冲功能,提高性能。还有`FilterInputStream`和`FilterOutputStream`的其他子类,如`PushbackInputStream`允许数据回退,`CheckedInputStream`和`CheckedOutputStream`用于校验数据完整性。 4. **流的关闭** 使用完流后,必须正确关闭,以释放资源。通常,可以使用`finally`块确保流的关闭,例如: ```java try (InputStream is = new FileInputStream("file.txt")) { // 读取操作 } catch (IOException e) { // 处理异常 } ``` 上述代码利用了Java 7引入的try-with-resources语句,自动关闭流。 5. **流的缓冲与缓冲区** 缓冲流如`BufferedReader`和`BufferedWriter`提高了读写效率,它们会在内部创建一个缓冲区,减少实际的物理I/O操作次数。 6. **字符编码与转换** Java的字符流默认使用UTF-8编码,但可以使用`InputStreamReader`和`OutputStreamWriter`指定不同的字符编码。 7. **多路复用流与选择器** Java NIO(非阻塞I/O)引入了多路复用器(Selector)和选择器(Channel),可以同时处理多个输入/输出连接,提升了并发性能。 Java的IO流系统是强大而灵活的,提供了多种类型的流以适应不同的输入输出需求,并通过过滤流和缓冲流增强了功能。理解这些流的概念和用法,对于编写高效的Java I/O程序至关重要。










- 粉丝: 49
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 如何学好网络营销课程.doc
- 信息系统安全概述.pptx
- 基于单片机的电子密码锁的课程设计.docx
- 数据挖掘的方法有哪些?.pdf
- 汽车单片机与车载网络培训课件.pptx
- 房产项目管理实用表格工具.doc
- 卫星通信系统概述.ppt
- 模板项目管理月报.doc
- 中企动力网络营销.pptx
- 专业会计必备的应的Excel技巧【会计实务操作教程】.pptx
- 数据库原理试卷A(标准答案).doc
- 网络安全入侵检测.ppt
- 最新国家开放大学电大《营销策划案例分析》网络核心课形考网考作业及答案.pdf
- 网络营销理论培训课件.pptx
- 综合布线技术与施工模拟公司制.pptx
- 无线网络WIFI对人们生活影响的调查报告样本.docx



- 1
- 2
前往页