질문
1.
ObjectStream에 대해 다시 배우고 싶습니다. 특히 직렬화가 무엇을 의미하는지 잘 모르겠습니다.
화면캡쳐(예시)
위 질문에 해당하는 질문의 링크나 스크린샷을 여기에 추가해 멘토분들이 참고할 수 있도록 하세요.
package com.test.main;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Scanner;
public class AAA{
public static void main(String [] args) {
SchoolClass schoolClass = new SchoolClass();
while (true) {
int menuNumber = schoolClass.inputMenu();
if (menuNumber == 1) {
schoolClass.inputStudentInfo();
}
else if(menuNumber == 2) {
schoolClass.printStudentInfo();
}
else if(menuNumber == 3) {
break;
}
}
}
}
class SchoolClass{
Scanner scanner;
FileInputStream fis = null;
FileOutputStream fos = null;
ObjectInputStream ois = null;
ObjectOutputStream oos = null;
public SchoolClass() {
scanner = new Scanner(System.in);
}
public int inputMenu() {
System.out.println("1. 학생정보 입력");
System.out.println("2. 학생정보 출력");
System.out.println("3. 종료");
System.out.print("메뉴 번호 : ");
int menuNumber = scanner.nextInt();
return menuNumber;
}
public void inputStudentInfo() {
try {
if(fos == null) {
fos = new FileOutputStream("test1000.dat", true);
oos = new ObjectOutputStream(fos);
}
System.out.print("이름 : ");
String name = scanner.next();
System.out.print("학년 : ");
int grade = scanner.nextInt();
TestClass100 t1 = new TestClass100(name, grade);
oos.writeObject(t1);;
}catch(Exception e) {
e.printStackTrace();
}
}
public void printStudentInfo() {
try {
if(fis == null) {
fis = new FileInputStream("test1000.dat");
ois = new ObjectInputStream(fis);
}
while (true) {
TestClass100 t200 = (TestClass100) ois.readObject();
t200.printStudentInfo();
}
}catch(EOFException e) {
// e.printStackTrace();
System.out.println("종료");
}catch(Exception e) {
// e.printStackTrace();
}
}
}
class TestClass100 implements Serializable{
String name;
int grade;
public TestClass100(String name, int grade){
this.name = name;
this.grade = grade;
}
public void printStudentInfo() {
System.out.printf("이름 : %s\n", name);
System.out.printf("학년 : %d\n", grade);
}
}
Java
복사
프로젝트 주소
위 질문에 해당하는 질문의 링크나 스크린샷을 여기에 추가해 멘토분들이 참고할 수 있도록 하세요.
멘토 답변
•
직렬화 역직렬화의 개념에 대해 설명하였습니다.
•
Serializable 인터페이스의 사용법에 대해 설명하였습니다.
•
Serializable은 java에서 사용되어지는 인터페이스이고, 안드로이드에서는 Parcelable을 사용할 수 있다는 것에 대해 설명하였습니다.
•
이 둘의 차이점에 대해 간단하게 설명하였고 리플렉션이 존재한다라는 것 정도로 설명하였습니다. (자세히 설명하진 않음)
•
A액티비티에서 B액티비티로 이동할 때 데이터를 움직여야할 상황이 존재한다라는 것을 이야기하였고, intent를 이용하면 데이터를 옮길 수 있다는 것을 설명하였습니다.
•
객체의 경우 intent를 통해 데이터를 옮길 수 없다라는 것을 설명하고 직렬화의 개념을 적용하면 가능하다는 것을 예시 코드를 같이 작성하며 공부하였습니다.