【蓝桥杯算法题】输入输出流问题
【蓝桥杯算法题】输入输出流问题
- 题目:对文本文件进行带缓存的读写操作,可以读取文件不同位置的信息,可以进行对象序列化和对象反序列化。
- 解释:
- 总结:
题目:对文本文件进行带缓存的读写操作,可以读取文件不同位置的信息,可以进行对象序列化和对象反序列化。
以下是一个简单的示例代码,演示了如何使用BufferedReader
、BufferedWriter
和RandomAccessFile
来进行带缓存的读写操作,并且使用ObjectInputStream
和ObjectOutputStream
来进行对象序列化和反序列化:
import java.io.*;public class FileIOExample {public static void main(String[] args) throws IOException, ClassNotFoundException {// 读取文件中的文本信息BufferedReader bufferedReader = new BufferedReader(new FileReader("input.txt"));String line;while ((line = bufferedReader.readLine()) != null) {System.out.println(line);}bufferedReader.close();// 在文件中指定位置写入数据RandomAccessFile randomAccessFile = new RandomAccessFile("output.dat", "rw");randomAccessFile.seek(10); // 将文件指针设置到第10个字节的位置randomAccessFile.writeBytes("Hello World!");randomAccessFile.close();// 对象序列化ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("data.dat"));Person person = new Person("张三", 25);objectOutputStream.writeObject(person);objectOutputStream.close();// 对象反序列化ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("data.dat"));Person personRead = (Person) objectInputStream.readObject();objectInputStream.close();System.out.println("姓名:" + personRead.getName() + ",年龄:" + personRead.getAge());}private static class Person implements Serializable {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public int getAge() {return age;}}
}
解释:
- 这段代码实现了文件的读写以及对象的序列化和反序列化。
- 首先,通过 BufferedReader 和 FileReader 两个类来读取 input.txt
文件中的文本信息。对于每一行数据,我们使用 readLine() 方法来读取,并且通过 while 循环输出到控制台上。 - 接着,使用 RandomAccessFile 类在 output.dat 文件中指定位置写入数据。其中,通过 seek()
方法将文件指针设置到第 10 个字节的位置,然后使用 writeBytes() 方法向该位置写入 “Hello World!”
的字符串内容。 - 接下来,通过 ObjectOutputStream 和 FileOutputStream 两个类来实现对象的序列化。我们创建一个
Person 类型的对象 person,并将其写入文件 data.dat 中。 - 最后,通过 ObjectInputStream 和 FileInputStream 两个类来实现对象的反序列化。我们从文件
data.dat 中读取内容并将其转换为 Person 类型的对象 personRead,并输出该对象的姓名和年龄信息。
总结:
整个程序实现了多种文件操作,包括文本读取、定位写入和对象序列化等,是 Java I/O 操作的典型示例。
首先使用BufferedReader
读取了一个文件中的文本信息,并将其打印出来;然后使用RandomAccessFile
在文件中指定位置写入了一些数据;最后使用ObjectOutputStream
和ObjectInputStream
对一个自定义对象进行了序列化和反序列化,并将其输出到控制台上。注意,Person类需要实现Serializable
接口才可以被序列化。