Java基础夯实——1.8 Java I/O

Java I/O 简介

Java I/O(输入/输出)是 Java 提供的一套用于读写数据的API,主要包括文件、网络、控制台等数据的输入和输出操作。Java I/O体系结构包括了不同的类和接口,使得开发者便捷地处理字节流和字符流、文件操作、数据流以及对象流等。

1. Java I/O 分类

1.1 字节流(Byte Streams)

字节流用于处理所有类型的I/O,包括图像、音频和视频等二进制数据,以字节为单位进行读写。字节流的基本输入输出类有:

  • InputStream:所有字节输入流的超类。

    • FileInputStream:从文件中读取字节流。
    • BufferedInputStream:提供缓冲区的输入流,提高读取效率。
    • DataInputStream:允许应用程序以机器无关的方式从底层输入流中读取基本 Java 数据类型。
  • OutputStream:所有字节输出流的超类。

    • FileOutputStream:向文件中写入字节流。
    • BufferedOutputStream:提供缓冲区的输出流,增加写入效率。
    • DataOutputStream:允许应用程序将基本 Java 数据类型写入输出流。

1.2 字符流(Character Streams)

字符流是专门用于处理字符的输入和输出操作,它基于 Unicode 编码,适合文本数据的处理,以字符为单位进行数据的读写。字符流的基本输入输出类有:

  • Reader:所有字符输入流的超类。

    • FileReader:从文件中读取字符流。
    • BufferedReader:提供缓冲区的输入流,用于高效地读取字符。
    • InputStreamReader:将字节流转换为字符流。
  • Writer:所有字符输出流的超类。

    • FileWriter:向文件中写入字符流。
    • BufferedWriter:提供缓冲区的输出流,提高字符写入效率。
    • PrintWriter:支持格式化输出的字符流。

2. Java I/O 核心类

2.1 文件操作类

  • File:用于表示文件或目录,提供了文件的创建、删除、重命名、判断文件是否存在等方法。

    示例:

    File file = new File("example.txt");
    if (!file.exists()) {
         
        file.createNewFile();
    }
    

2.2 缓冲流类

缓冲流用于提高数据的读取和写入效率。它通过内部缓冲区减少了多次读写操作。

  • BufferedReader:字符流的缓冲区输入流。
  • BufferedWriter:字符流的缓冲区输出流。
  • BufferedInputStream:字节流的缓冲区输入流。
  • BufferedOutputStream:字节流的缓冲区输出流。

2.3 数据流类

数据流用于处理原始数据类型(如 intdouble)和字符串等数据的输入和输出。通过 DataInputStreamDataOutputStream 可以以平台无关的方式读取和写入这些数据。

  • DataInputStream:用于读取原始数据类型。
  • DataOutputStream:用于写入原始数据类型。

2.4 对象流类

Java 提供了对对象的输入输出支持,可以将对象序列化(转化为字节流)和反序列化(从字节流恢复对象)。

  • ObjectInputStream:用于读取对象。
  • ObjectOutputStream:用于写入对象。

3. Java NIO(New I/O)

Java NIO(New I/O)是一个更高效、更灵活的I/O库,主要特点是基于缓冲区和通道(Channel)进行I/O操作,能够处理更大规模的数据,并且支持异步 I/O 操作。与传统的 Java I/O 不同,NIO 采用了基于事件驱动的模型,支持非阻塞 I/O 操作和多路复用。

3.1 NIO 核心组件

  • Buffer:数据的容器,用于与通道进行数据交互。
  • Channel:用于读写数据的通道。常用的通道包括 FileChannelSocketChannel
  • Selector:用于多路复用,允许单一线程处理多个通道。

4. 常见的I/O操作

4.1 读取文件

  • 使用字节流:

    FileInputStream fis = new FileInputStream("example.txt");
    int byteData;
    while ((byteData = fis.read()) != -1) {
         
        System.out.print((char) byteData);
    }
    fis.close();
    
  • 使用字符流:

    FileReader fr = new FileReader("example.txt");
    int charData;
    while ((charData = fr.read()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值