반응형
객체 스트림을 사용하기 위해서 우선 객체 파일을 생성합니다.
package chap15.sec02.exam06;
import java.io.Serializable;
import java.util.Date;
import java.util.Objects;
/**
* packageName : chap14.sec02.exam06
* fileName : Board
* author : ds
* date : 2022-10-07
* description : 게시판 객체
* ===========================================================
* DATE AUTHOR NOTE
* —————————————————————————————
* 2022-10-07 ds 최초 생성
*/
// 모델(Model) : 순수객체, 속성, 생성자, Setter/Getter, 그외에 로직을 구하는 함수는 없음
// 목적 : 데이터 저장용/검색용
// Service : 업무가 들어가 있는 클래스(객체)
// Controller : 여러 화면을(View) 조작하는(컨트롤하는) 클래스
// MVC 디자인패턴(종합편) : M(Model) / V(View) / C(Controller)
public class Board implements Serializable {
// 속성
// 게시판 번호
private int bno;
// 제목
private String title;
// 내용
private String content;
// 작성자
private String writer;
// 날짜
private Date date;
// 생성자
public Board(int bno, String title, String content, String writer, Date date) {
this.bno = bno;
this.title = title;
this.content = content;
this.writer = writer;
this.date = date;
}
// 함수 재정의
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Board board = (Board) o;
return bno == board.bno && Objects.equals(title, board.title) && Objects.equals(content, board.content) && Objects.equals(writer, board.writer) && Objects.equals(date, board.date);
}
@Override
public int hashCode() {
return Objects.hash(bno, title, content, writer, date);
}
@Override
public String toString() {
return "Board{" +
"bno=" + bno +
", title='" + title + '\'' +
", content='" + content + '\'' +
", writer='" + writer + '\'' +
", date=" + date +
'}';
}
}
Serializable (직렬화)
Object 또는 Data를 다른 컴퓨터의 자바 시스템에서도 사용 할수 있도록 바이트 스트림(stream of bytes) 형태로 연속전인(serial) 데이터로 변환하는 포맷 변환 기술을 일컫는다. 그 반대 개념인 역직렬화는(Deserialize)는 바이트로 변환된 데이터를 원래대로 자바 시스템의 Object 또는 Data로 변환하는 기술이다.
객체 클래스(위에서는 Borad)에 Serializable 을 상속받으면 가능
public class ObjectApplication {
// 객체 쓰기 공유 함수
public static void writeList() throws Exception {
// 자료구조 : ArrayList
List<Board> list = new ArrayList<>(); // List 생성 (ArrayList)
list.add(new Board(1, "제목1", "내용1", "글쓴이1", new Date()));
list.add(new Board(2, "제목2", "내용2", "글쓴이2", new Date()));
list.add(new Board(3, "제목3", "내용3", "글쓴이3", new Date()));
// TODO: 객체를 파일에 쓰기(파일 생성)
FileOutputStream fileOutputStream
= new FileOutputStream("src/main/resources/board.txt");
// TODO : 보조스트림 적용(객체 쓰기)
// .writeObject(객체배열)
ObjectOutputStream objectOutputStream
= new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(list); // 객체 -> 파일 쓰기 함수 호출
objectOutputStream.flush();
objectOutputStream.close();
}
// 객체 읽기 공유 함수
public static List<Board> readList() throws Exception {
// TODO: 파일 읽기로 접근
FileInputStream fileInputStream
= new FileInputStream("src/main/resources/board.txt");
// TODO : 보조스트림 적용 : 파일 -> 객체 읽기
ObjectInputStream objectInputStream
= new ObjectInputStream(fileInputStream);
// TODO : 파일 -> 객체배열로 원복해서 읽기 : .readObject()
// 대상 객체[배열]은 Serializable 인터페이스를 상속받아야 함
List<Board> list = (List<Board>)objectInputStream.readObject(); // 객체로 바꾸기(원복)
return list;
}
public static void main(String[] args) throws Exception{
writeList(); // 쓰기 공유 함수 객체배열 List 파일에 쓰기
// 파일에 쓴 것을 읽기
List<Board> list = readList(); // 읽기 공유 함수(역직렬화)
System.out.println(list);
}
}
객체 쓰기 공유 함수
// 객체 쓰기 공유 함수
public static void writeList() throws Exception {
// 자료구조 : ArrayList
List<Board> list = new ArrayList<>(); // List 생성 (ArrayList)
list.add(new Board(1, "제목1", "내용1", "글쓴이1", new Date()));
list.add(new Board(2, "제목2", "내용2", "글쓴이2", new Date()));
list.add(new Board(3, "제목3", "내용3", "글쓴이3", new Date()));
// TODO: 객체를 파일에 쓰기(파일 생성)
FileOutputStream fileOutputStream
= new FileOutputStream("src/main/resources/board.txt");
// TODO : 보조스트림 적용(객체 쓰기)
// .writeObject(객체배열)
ObjectOutputStream objectOutputStream
= new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(list); // 객체 -> 파일 쓰기 함수 호출
objectOutputStream.flush();
objectOutputStream.close();
}
객체 읽기 공유 함수
// 객체 읽기 공유 함수
public static List<Board> readList() throws Exception {
// TODO: 파일 읽기로 접근
FileInputStream fileInputStream
= new FileInputStream("src/main/resources/board.txt");
// TODO : 보조스트림 적용 : 파일 -> 객체 읽기
ObjectInputStream objectInputStream
= new ObjectInputStream(fileInputStream);
// TODO : 파일 -> 객체배열로 원복해서 읽기 : .readObject()
// 대상 객체[배열]은 Serializable 인터페이스를 상속받아야 함
List<Board> list = (List<Board>)objectInputStream.readObject(); // 객체로 바꾸기(원복)
return list;
}
메인 함수
public static void main(String[] args) throws Exception{
writeList(); // 쓰기 공유 함수 객체배열 List 파일에 쓰기
// 파일에 쓴 것을 읽기
List<Board> list = readList(); // 읽기 공유 함수(역직렬화)
System.out.println(list);
}
}
반응형
'Java > Java 이론' 카테고리의 다른 글
람다 함수 (0) | 2023.10.02 |
---|---|
파일 클래스를 이용한 파일 출력 (0) | 2023.10.02 |
printstream (0) | 2023.10.02 |
보조스트림 : 기본 자료형으로 입출력하기 (0) | 2023.10.02 |
파일 복사 성능 테스트(일반복사 vs 버퍼 사용복사) (0) | 2023.10.02 |