美文网首页
Java的IO流

Java的IO流

作者: 小虎哥的技术博客 | 来源:发表于2023-07-29 13:33 被阅读0次

    输入流和输出流

    在 Java 中,输入流和输出流是 IO 操作中的常见概念,它们分别用于读取数据和写入数据。在输入和输出时,数据以字节或字符的方式流动。这种数据流经常需要使用内存来存储和传输,这会涉及到内存缓冲区的概念。

    内存缓冲区是 Java 中标准库使用的一种通用机制,用于优化 IO 操作。内存缓冲区通常是一个内部数组,用于暂存有关数据的字节或字符。在输入时,Java 会将数据读入内存缓冲区中,并按需提供给应用程序;在输出时,Java 会将数据存储在内存缓冲区中,并在缓冲区满或需要刷新时写入磁盘或网络。

    这里有一个比喻可以帮助你更好地理解输入流和输出流的区别。想象你正在看一本书,书页是由纸张组成的。在输入方面,你正在阅读一本书,你正在从书中读取数据(或内容)。在输出方面,你正在编写一篇文章或制作一个总结,你正在将数据写入笔记本中。

    在 Java 中,输入流和输出流的主要区别在于使用的方法。使用输入流时,数据将在内存缓冲区中读取,并使用 read() 方法逐步处理数据。使用输出流时,数据将写入内存缓冲区,并使用 write() 方法一次性写入磁盘或网络。

    为了更好地记忆输入流和输出流,在输入时,我们常常需要使用 read() 方法,读取数据到应用程序中;在输出时,我们通常需要使用 write() 方法,将数据写入到文件、网络或其他应用程序中。

    划分字节流和字符流

    Java中的 IO 流可以划分为以下两类:

    • 字节流
    • 字符流

    字节流适用于读写二进制数据,而字符流适用于读写文本数据。

    Java 还提供了输入输出流的抽象基类:InputStream 和 OutputStream 以及 Reader 和 Writer。

    下面我们将会讲解如何在 Java 中使用 IO 流来读写数据。

    字节流

    FileInputStream

    FileInputStream 用于从文件中读取数据。以下是一个使用 FileInputStream 读取文件的例子:

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

    在上面的代码中,我们使用 try-with-resources 语句来自动关闭输入流。使用 FileInputStream 的 read 方法来读取数据。我们可以通过读取返回值来知道是否已达到了文件的末尾。

    BufferedInputStream

    BufferedInputStream 用于读取大量数据时提高读取速度。默认情况下,每次调用 read 方法只会读取一个字节,使用 BufferedInputStream 可以读取大量数据并存储在内存缓冲区中,避免了频繁的读取磁盘。

    以下是一个使用 BufferedInputStream 读取文件的例子:

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

    在上面的代码中,我们使用 BufferedInputStream 来读取文件,并调用其 read 方法来读取数据。

    FileOutputStream

    FileOutputStream 用于将数据写入文件。以下是一个使用 FileOutputStream 写入数据的例子:

    try (FileOutputStream outputStream = new FileOutputStream("data.txt")) {
        outputStream.write('H');
        outputStream.write('e');
        outputStream.write('l');
        outputStream.write('l');
        outputStream.write('o');
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    在上面的代码中,我们使用 FileOutputStream 来写入数据,并调用其 write 方法来写入数据。

    BufferedOutputStream

    BufferedOutputStream 用于写入大量数据时提高写入速度。以下是一个使用 BufferedOutputStream 写入数据的例子:

    try (BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream("data.txt"))) {
        outputStream.write('H');
        outputStream.write('e');
        outputStream.write('l');
        outputStream.write('l');
        outputStream.write('o');
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    在上面的代码中,我们使用 BufferedOutputStream 来写入数据,并调用其 write 方法来写入数据。

    字符流

    FileReader

    FileReader 用于从文件中读取字符数据。以下是一个使用 FileReader 读取文件的例子:

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

    在上面的代码中,我们使用 try-with-resources 语句来自动关闭读取流。使用 FileReader 的 read 方法来读取数据。我们可以通过读取返回值来知道是否已达到了文件的末尾。

    BufferedReader

    BufferedReader 用于读取大量数据时提高读取速度。以下是一个使用 BufferedReader 读取文件的例子:

    try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) {
        String line = reader.readLine();
        while (line != null) {
            System.out.print(line);
            line = reader.readLine();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    在上面的代码中,我们使用 BufferedReader 来读取文件,并调用其 readLine 方法来读取数据。

    FileWriter

    FileWriter 用于将字符数据写入文件。以下是一个使用 FileWriter 写入数据的例子:

    try (FileWriter writer = new FileWriter("data.txt")) {
        writer.write("Hello");
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    在上面的代码中,我们使用 FileWriter 来写入数据,并调用其 write 方法来写入数据。

    BufferedWriter

    BufferedWriter 用于写入大量数据时提高写入速度。以下是一个使用 BufferedWriter 写入数据的例子:

    try (BufferedWriter writer = new BufferedWriter(new FileWriter("data.txt"))) {
        writer.write("Hello");
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    在上面的代码中,我们使用 BufferedWriter 来写入数据,并调用其 write 方法来写入数据。

    总结

    Java中的 IO 流可以分为字节流和字符流,分别适用于读写二进制数据和文本数据。Java 还提供了输入输出流的抽象基类:InputStream 和 OutputStream 以及 Reader 和 Writer。同时,Java 8 中还提供了 BufferedInputStream 和 BufferedOutputStream 以及 BufferedReader 和 BufferedWriter,用于提高读写速度。在使用 IO 流时,请注意关闭流避免资源泄漏。

    相关文章

      网友评论

          本文标题:Java的IO流

          本文链接:https://www.haomeiwen.com/subject/roqjpdtx.html