Java IO流的分类及使用方法详解

温暖如初 2024-05-29 ⋅ 23 阅读

IO(Input/Output)流是Java中用于读取和写入数据的机制。它是连接程序和外部资源(比如文件、网络连接、数据库等)的桥梁,使程序能够实现数据的输入和输出。

Java中的IO流可以分为两种类型:字节流(Byte Stream)和字符流(Character Stream)。

字节流(Byte Stream)

字节流可以处理二进制数据。它们的基本操作是使用字节(byte)作为数据单元。

Java中的字节流有两个基本类:InputStream(输入流)和OutputStream(输出流)。它们是所有字节流类的超类。

InputStream

InputStream是所有输入流类的基类。它提供了一系列的read()方法,用于读取字节并将其放入一个字节数组中。常用的子类有FileInputStream(读取文件)、ByteArrayInputStream(从字节数组中读取)等。

下面是使用InputStream从文件中读取数据的示例:

try {
    InputStream is = new FileInputStream("example.txt");
    int data;
    while ((data = is.read()) != -1) {
        System.out.print((char) data);
    }
    is.close();
} catch (IOException e) {
    e.printStackTrace();
}

OutputStream

OutputStream是所有输出流类的基类。它提供了一系列的write()方法,用于将字节写入到输出流中。常用的子类有FileOutputStream(写入文件)、ByteArrayOutputStream(写入字节数组)等。

下面是使用OutputStream将数据写入文件的示例:

try {
    OutputStream os = new FileOutputStream("example.txt");
    String data = "Hello, World!";
    os.write(data.getBytes());
    os.close();
} catch (IOException e) {
    e.printStackTrace();
}

字符流(Character Stream)

字符流可以处理文本数据。它们的基本操作是使用字符(char)作为数据单元。

Java中的字符流有两个基本类:Reader(读取字符流)和Writer(写入字符流)。它们是所有字符流类的超类。

Reader

Reader是所有字符输入流类的基类。它提供了一系列的read()方法,用于读取字符并将其放入一个字符数组中。常用的子类有FileReader(读取文件)、StringReader(从字符串中读取)等。

下面是使用Reader从文件中读取数据的示例:

try {
    Reader reader = new FileReader("example.txt");
    int data;
    while ((data = reader.read()) != -1) {
        System.out.print((char) data);
    }
    reader.close();
} catch (IOException e) {
    e.printStackTrace();
}

Writer

Writer是所有字符输出流类的基类。它提供了一系列的write()方法,用于将字符写入到输出流中。常用的子类有FileWriter(写入文件)、StringWriter(写入字符串)等。

下面是使用Writer将数据写入文件的示例:

try {
    Writer writer = new FileWriter("example.txt");
    String data = "Hello, World!";
    writer.write(data);
    writer.close();
} catch (IOException e) {
    e.printStackTrace();
}

总结

Java IO流提供了灵活而强大的读取和写入数据的机制。通过理解和掌握不同类型的IO流,我们可以更好地处理输入和输出操作。

字节流适合处理二进制数据,而字符流适合处理文本数据。无论是字节流还是字符流,它们都有各自对应的输入流和输出流类。在使用IO流时,我们应根据具体需求选择合适的流类,并学习其相应的读写操作方法。


全部评论: 0

    我有话说: