序列化流
Java 序列化流允许对象转换为字节流,以便可以将其存储到文件中或通过网络传输。相反,反序列化流将字节流转换回对象。
ObjectOutputStream
和 ObjectInputStream
这些类用于对象的序列化和反序列化。
序列化示例
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class Person implements Serializable {
private static final long serialVersionUID = 1L;
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class SerializationExample {
public static void main(String[] args) {
Person person = new Person("John Doe", 30);
try (FileOutputStream fos = new FileOutputStream("person.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(person);
} catch (IOException e) {
e.printStackTrace();
}
}
}
反序列化示例
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class DeserializationExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("person.ser");
ObjectInputStream ois = new ObjectInputStream(fis)) {
Person person = (Person) ois.readObject();
System.out.println("Name: " + person.name);
System.out.println("Age: " + person.age);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
打印流
打印流用于格式化和输出数据。常用的打印流包括 PrintStream
和 PrintWriter
。
PrintStream
PrintStream
通常用于控制台输出,支持自动刷新和字符编码。
PrintWriter
PrintWriter
更常用于写入文本文件,支持字符编码设置。
Properties
集合
Properties
类用于维护键值对的集合,通常用于配置文件。它继承自 Hashtable
类,并提供了加载和保存属性到文件的方法。
创建和使用 Properties
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
public class PropertiesExample {
public static void main(String[] args) {
Properties props = new Properties();
// 设置属性
props.setProperty("username", "admin");
props.setProperty("password", "12345");
// 保存属性到文件
try (FileOutputStream fos = new FileOutputStream("config.properties")) {
props.store(fos, "User Configurations");
} catch (IOException e) {
e.printStackTrace();
}
// 加载属性从文件
Properties loadedProps = new Properties();
try (FileInputStream fis = new FileInputStream("config.properties")) {
loadedProps.load(fis);
} catch (IOException e) {
e.printStackTrace();
}
// 获取属性值
String username = loadedProps.getProperty("username");
String password = loadedProps.getProperty("password");
System.out.println("Username: " + username);
System.out.println("Password: " + password);
}
}
使用 XML 存储属性
Properties
类还支持以 XML 格式存储和加载属性。
总结
- 序列化流:使用
ObjectOutputStream
和ObjectInputStream
进行对象的序列化和反序列化。- 打印流:使用
PrintStream
和PrintWriter
进行格式化输出。- Properties 集合:用于存储和加载键值对配置,支持
.properties
文件和 XML 文件。