ObjectInputStream, ObjectOutputStream
- 직렬화 가능한 대상을 읽고 쓸 수 있다.
- 직렬화 가능한 대상은 기본형 타입 or java.io.Serializable 인터페이스를 구현하고 있는 객체이다.
package com.example.IO;
import java.io.Serializable;
public class User implements Serializable {
private String email;
private String name;
private int birthYear;
public User(String email, String name, int birthYear) {
this.email = email;
this.name = name;
this.birthYear = birthYear;
}
public String getEmail() {
return email;
}
public String getName() {
return name;
}
public int getBirthYear() {
return birthYear;
}
@Override
public String toString() {
return "User{" +
"email='" + email + '\'' +
", name='" + name + '\'' +
", birthYear=" + birthYear +
'}';
}
}
package com.example.IO;
import java.io.*;
import java.util.ArrayList;
public class ObjectInputOutExam {
public static void main(String[] args)throws Exception{
User user1 = new User("hong@example.com","홍홍홍",1980);
User user2 = new User("choi@example.com","최최최",1970);
User user3 = new User("kim@example.com","김김김",1950);
ArrayList<User> list = new ArrayList<>();
list.add(user1);
list.add(user2);
list.add(user3);
ArrayList<User> list2 = copy(list);
for (int i = 0; i < list2.size(); i++){
System.out.println(list2.get(i));
}
/*ArrayList<User> list2 = list;
for (int i = 0; i < list2.size(); i++){
System.out.println(list2.get(i));
}*/
}
private static ArrayList<User> copy(ArrayList<User> list) throws IOException, ClassNotFoundException {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bout);
out.writeObject(list);
out.close();
bout.close();
byte[] array = bout.toByteArray();
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(array));
ArrayList<User> list2 = (ArrayList)in.readObject();
in.close();
return list2;
}
}
'JAVA' 카테고리의 다른 글
네트워크 프로그래밍 - 1 (0) | 2023.09.05 |
---|---|
쓰레드(Thread) 개념, 실행방법 (0) | 2023.09.05 |
Java IO 4 - DataInputStream, DataOutputStream (0) | 2023.08.24 |
Java IO 3 -Reader, Writer (0) | 2023.08.24 |
Java IO 2 (0) | 2023.08.23 |
댓글