This example shows how to use ObjectOutputStream
to write objects to a file in Java, aka Serialization.
public static void writeObjectToFile(Person obj, File file) throws IOException {
try (FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(obj);
oos.flush();
}
}
Note
1. Java object
We can serialize or marshal an object which implements a Serializable
interface.
Person.java
package com.favtuts.io.object; import java.io.Serializable; import java.math.BigDecimal; public class Person implements Serializable { private static final long serialVersionUID = -1; private String name; private int age; // if transient, JVM ignore this field for serialization private transient BigDecimal salary; public Person(String name, int age, BigDecimal salary) { this.name = name; this.age = age; this.salary = salary; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public BigDecimal getSalary() { return salary; } public void setSalary(BigDecimal salary) { this.salary = salary; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", salary=" + salary + '}'; } }
2. Write Object to File
The below example will write the Person
object into a file named person.bin
.
HelloSerializationFile.java
package com.favtuts.io.object; import java.io.*; import java.math.BigDecimal; public class HelloSerializationFile { public static void main(String[] args) throws IOException, ClassNotFoundException { Person person = new Person("favtuts", 50, new BigDecimal(1000)); File file = new File("person.bin"); writeObjectToFile(person, file); Person p = readObjectFromFile(file); System.out.println(p); } // Serialization // Save object into a file public static void writeObjectToFile(Person obj, File file) throws IOException { try (FileOutputStream fos = new FileOutputStream(file); ObjectOutputStream oos = new ObjectOutputStream(fos) ) { oos.writeObject(obj); oos.flush(); } } // Deserialization // Get object from a file public static Person readObjectFromFile(File file) throws IOException, ClassNotFoundException { Person result = null; try (FileInputStream fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis) ) { result = (Person) ois.readObject(); } return result; } }
Output
Person{name='favtuts', age=50, salary=null}
3. More Serialization examples
// Serialization // Save object into a file. public static void writeObjectToFile(Person obj, File file) throws IOException { try (FileOutputStream fos = new FileOutputStream(file); ObjectOutputStream oos = new ObjectOutputStream(fos)) { oos.writeObject(obj); oos.flush(); } } // Serialization // Convert object to OutputStream public static void writeObjectToStream(Object obj, OutputStream output) throws IOException { try (ObjectOutputStream oos = new ObjectOutputStream(output)) { oos.writeObject(obj); oos.flush(); } } // Serialization // Convert object to byte[] public static byte[] writeObjectToStream(Object obj) { ByteArrayOutputStream boas = new ByteArrayOutputStream(); try (ObjectOutputStream ois = new ObjectOutputStream(boas)) { ois.writeObject(obj); return boas.toByteArray(); } catch (IOException ioe) { ioe.printStackTrace(); } throw new RuntimeException(); }
Download Source Code
$ git clone https://github.com/favtuts/java-core-tutorials-examples
$ cd java-io/object
References
- JavaDoc ObjectOutputStream
- Java Serialization and Deserialization examples
- Serialization Filtering
- OWASP – Deserialization of untrusted data
- Brian Goetz – Towards Better Serialization
- Evil Pickles: DoS attacks based on Object-Graph Engineering
- Java Object Serialization Specification
- How to read an object from file in Java (ObjectInputStream)