Java输入输出(I/O)流

2023-12-22 22:47:12

Java I/O流是处理数据输入和输出的重要机制。无论是读取文件、从网络获取数据还是其他形式的数据交换,I/O流都扮演着核心角色。本文将详细介绍Java I/O流的基本概念和应用。

I/O流概述

Java I/O流主要分为两大类:字节流(InputStreamOutputStream)和字符流(ReaderWriter)。字节流主要用于处理原始二进制数据,而字符流用于处理文本数据。

使用字节流读写数据

字节流是处理I/O的基本形式。以下是一个使用FileInputStreamFileOutputStream进行文件读写的例子:

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

public class ByteStreamExample {
    public static void main(String[] args) {
        try (FileInputStream in = new FileInputStream("input.txt");
             FileOutputStream out = new FileOutputStream("output.txt")) {

            int byteRead;
            while ((byteRead = in.read()) != -1) {
                out.write(byteRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个例子中,我们创建了FileInputStreamFileOutputStream的实例来读取和写入文件。我们逐字节读取输入文件并将其写入输出文件。

使用字符流处理文本?

字符流是专门用于处理文本的。以下是一个使用FileReaderFileWriter的示例:

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

public class CharStreamExample {
    public static void main(String[] args) {
        try (FileReader reader = new FileReader("input.txt");
             FileWriter writer = new FileWriter("output.txt")) {

            int character;
            while ((character = reader.read()) != -1) {
                writer.write(character);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在此例中,我们使用FileReaderFileWriter来读取和写入文本文件。和字节流类似,我们逐字符地处理文件。

高级I/O流?

Java还提供了许多高级I/O流,比如缓冲流(BufferedReaderBufferedWriter)、数据流(DataInputStreamDataOutputStream)和对象流(ObjectInputStreamObjectOutputStream)等,用于提高性能和处理特定数据类型。

缓冲流(Buffered Streams)

缓冲流增加了一个缓冲层,用于减少实际读写操作的次数,从而提高了I/O操作的效率。在Java中,BufferedReaderBufferedWriter是用于文本文件的缓冲流。

使用BufferedReaderBufferedWriter

下面是一个使用BufferedReaderBufferedWriter的示例:

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

public class BufferedStreamExample {
    public static void main(String[] args) {
        try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
             BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {

            String line;
            while ((line = reader.readLine()) != -1) {
                writer.write(line);
                writer.newLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在此例中,我们使用BufferedReader来逐行读取文件,并使用BufferedWriter来写入文件,每写完一行就添加一个新行。

对象流(Object Streams)

对象流ObjectInputStreamObjectOutputStream允许读取和写入实现了Serializable接口的对象。这对于对象序列化和反序列化非常有用。

使用ObjectInputStreamObjectOutputStream

以下是一个简单的对象流使用示例:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class ObjectStreamExample {

    private static class Person implements Serializable {
        private static final long serialVersionUID = 1L;
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        @Override
        public String toString() {
            return "Person{name='" + name + "', age=" + age + "}";
        }
    }

    public static void main(String[] args) {
        Person person = new Person("Alice", 30);

        // 将对象写入文件
        try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("person.obj"))) {
            out.writeObject(person);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 从文件读取对象
        try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("person.obj"))) {
            Person readPerson = (Person) in.readObject();
            System.out.println(readPerson);
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

在此例中,我们创建了一个简单的Person类,实现了Serializable接口。然后,我们使用ObjectOutputStreamPerson对象写入文件,随后使用ObjectInputStream读取该对象。?

结论

理解和掌握Java I/O流对于进行有效的数据处理至关重要。Java的I/O流提供了强大而灵活的机制来处理各种数据输入和输出。掌握这些技巧对于编写高效和健壮的Java应用程序至关重要。通过实践和探索,你可以进一步了解Java I/O流的许多高级特性和最佳实践。

希望这篇博客能帮助你建立对Java I/O流的基本理解。

文章来源:https://blog.csdn.net/m0_73449789/article/details/135160596
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。