java IO流

[复制链接]
发表于 2025-3-18 10:03:23 | 显示全部楼层 |阅读模式

Java I/O(输入/输出)是Java编程中非常重要的部分,用于处理数据的读取和写入操作。以下是一些常见的Java I/O知识点:


1. Java I/O体系结构

Java I/O主要分为两大类:

  • 字节流(Byte Stream):以字节为单位进行数据处理,适用于处理二进制数据,如文件、图片等。主要类包括InputStreamOutputStream
  • 字符流(Character Stream):以字符为单位进行数据处理,适用于处理文本数据。主要类包括ReaderWriter

两者之间的关系是:字符流在底层会使用字节流来实现,但会根据指定的字符集(如UTF-8)进行编码和解码。


2. 常见的I/O类和接口

字节流:

  • InputStream:字节输入流的抽象基类,所有字节输入流都继承自它。
  • OutputStream:字节输出流的抽象基类,所有字节输出流都继承自它。
  • FileInputStream:用于从文件中读取字节数据。
  • FileOutputStream:用于向文件中写入字节数据。
  • BufferedInputStreamBufferedOutputStream:带缓冲功能的字节流,可以提高读写效率。
  • DataInputStreamDataOutputStream:用于读写基本数据类型(如int、double等)的字节流。

字符流:

  • Reader:字符输入流的抽象基类。
  • Writer:字符输出流的抽象基类。
  • FileReader:用于从文件中读取字符数据。
  • FileWriter:用于向文件中写入字符数据。
  • BufferedReaderBufferedWriter:带缓冲功能的字符流,支持按行读取和高效写入。
  • InputStreamReaderOutputStreamWriter:用于在字节流和字符流之间进行转换。

3. 文件操作

  • File:用于表示文件或目录的路径名,可以获取文件信息(如大小、路径、是否存在等),也可以创建、删除文件或目录。
  • 文件路径:Java支持绝对路径和相对路径。
  • 文件分隔符:在Windows系统中是\,在Linux/Unix系统中是/。可以通过File.separator获取系统默认的分隔符。

4. 缓冲流

  • 缓冲流的作用:减少磁盘I/O操作的次数,提高读写效率。
  • BufferedInputStreamBufferedOutputStream:字节缓冲流,内部维护一个缓冲区。
  • BufferedReaderBufferedWriter:字符缓冲流,支持按行读取和高效写入。

5. 序列化与反序列化

  • 序列化:将对象转换为字节序列的过程,便于存储或传输。
  • 反序列化:将字节序列还原为对象的过程。
  • Serializable接口:需要序列化的类必须实现此接口。
  • ObjectOutputStreamObjectInputStream:用于序列化和反序列化对象。

6. I/O异常处理

  • IOException:I/O操作中可能抛出的异常,如文件不存在、磁盘空间不足等。
  • FileNotFoundException:文件未找到异常,继承自IOException
  • 异常处理:通常使用try-catch块捕获异常,或者使用try-with-resources语句自动关闭资源。

7. 其他常用类

  • PrintStreamPrintWriter:用于格式化输出,支持打印多种类型的数据。
  • RandomAccessFile:支持随机访问文件,可以读写文件的任意位置。
  • Scanner:用于从控制台或文件中读取输入,支持按行或按分隔符读取。

8. NIO(New I/O)

  • NIO是Java 1.4引入的,是对传统I/O的补充,提供了非阻塞I/O操作、内存映射文件I/O、通道(Channel)和缓冲区(Buffer)等特性。
  • Channel:用于在缓冲区和实体(如文件、网络连接)之间传输数据。
  • Buffer:用于存储数据的容器,如ByteBufferCharBuffer等。
  • Files:提供了大量静态方法,用于操作文件和目录,如复制、移动、删除等。

9. 常见面试题

  • 如何选择使用字节流还是字符流?
    • 如果处理的是文本数据,优先使用字符流;如果是二进制数据,使用字节流。
  • 如何避免I/O资源泄漏?
    • 使用try-with-resources语句,确保资源在使用后自动关闭。
  • 什么是序列化?哪些类可以被序列化?
    • 序列化是将对象转换为字节序列的过程。需要序列化的类必须实现Serializable接口。

这些是Java I/O中常见的知识点,掌握它们可以帮助你更好地处理文件、网络通信等场景下的输入输出操作。

GMT+8, 2025-4-20 17:10 , Processed in 0.070652 second(s), 35 queries Archiver|手机版|小黑屋|Attic ( 京ICP备2020048627号 )

快速回复 返回顶部 返回列表