java基础知识I/O流使用详解


在Java中,I/O(输入/输出)流是用于从源(如文件、内存或网络)读取数据或向目标写入数据的机制。Java的I/O库提供了丰富的类和方法来处理不同类型的输入和输出操作。下面是对Java I/O流使用的一个基本详解:

### 1. 流的分类

Java中的流主要分为两大类:字节流(Byte Streams)和字符流(Character Streams)。

- **字节流**:以字节为单位处理数据,适用于处理二进制数据(如图片、视频等)。主要类有`InputStream`和`OutputStream`。

- **字符流**:以字符为单位处理数据,适用于处理文本数据。主要类有`Reader`和`Writer`。

### 2. 字节流

- **InputStream**:是所有字节输入流的超类。

- **OutputStream**:是所有字节输出流的超类。

#### 示例:使用FileInputStream和FileOutputStream读写文件


import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ByteStreamExample {
    public static void main(String[] args) {
        // 写入文件
        try (FileOutputStream fos = new FileOutputStream("example.txt")) {
            String text = "Hello, World!";
            byte[] bytes = text.getBytes();
            fos.write(bytes);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 读取文件
        try (FileInputStream fis = new FileInputStream("example.txt")) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = fis.read(buffer)) != -1) {
                System.out.write(buffer, 0, bytesRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

### 3. 字符流

- **Reader**:是所有字符输入流的超类。

- **Writer**:是所有字符输出流的超类。

#### 示例:使用FileReader和FileWriter读写文件


import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class CharacterStreamExample {
    public static void main(String[] args) {
        // 写入文件
        try (FileWriter fw = new FileWriter("example.txt")) {
            fw.write("Hello, World!");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 读取文件
        try (FileReader fr = new FileReader("example.txt")) {
            int character;
            while ((character = fr.read()) != -1) {
                System.out.print((char) character);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

### 4. 缓冲流

为了提高I/O操作的效率,Java提供了缓冲流(Buffered Streams)。缓冲流内部使用了一个缓冲区来存储数据,减少了实际读写操作的次数。

- **BufferedInputStream** 和 **BufferedOutputStream**:字节缓冲流。

- **BufferedReader** 和 **BufferedWriter**:字符缓冲流。

### 5. 转换流

转换流(如`InputStreamReader`和`OutputStreamWriter`)用于在字节流和字符流之间进行转换。

### 6. 其他流

Java还提供了许多其他类型的流,如`PrintStream`、`PrintWriter`(用于方便地打印输出)、`ObjectInputStream`和`ObjectOutputStream`(用于对象的序列化和反序列化)等。

### 总结

Java的I/O流是一个庞大而复杂的体系,但掌握其基本概念和常用类后,可以灵活地处理各种输入输出任务。上述示例仅展示了最基本的用法,实际应用中可能需要根据具体需求选择合适的流和类。