붓, 그리다
입출력(직렬화) 본문
[ 입력을 받아 파일로 저장 ]
1) 자료형 상관없이 문자열 저장 : FileOutputStream, FileWriter
2) 자료형에 맞게 저장 : DataInputStream, DataOutputStream
3) 객체를 저장, 불러오기 : ObjectInputStream(객체 불러오기), ObjectOutputStream(객체 저장)
- writeObject(저장시킬 객체명), readerObject() -> 객체 직렬화(Spring)와 연결
[ 직렬화 ]
- 메모리상의 저장된 객체(=ObjectOutputStream)를 파일로 저장
<-> 역직렬화 ObjectInputStream
- 네트워크 전송도 가능
1. 객체 만들기 : 직렬화가 가능한 클래스
- 객체를 직렬화할 때 올바르게 저장되는 객체를 만들 수 있는 클래스
class 클래스명 implements Serializable{}
- Serialiazalbe 인터페이스는 추상메서드가 없음
- 파일로 저장될 때 객체형이 Object 자료형으로 변환되어 저장이 된다.
- 직렬화된 객체를 다시 원래상태로 되돌리기 위해서 원래객체형으로 형변환해야한다.
*인터페이스 종류
1) 직렬화 목적으로 만들어진 인터페이스
- 추상메서드가 없음 -> 설계목적이 아님
- Maker Interface(마커 인터페이스)
2) 설계목적으로 만들어진 인터페이스
3) 이벤트 처리 목적으로 만들어지 인터페이스
- ActionListener~
[ Object 객체는 직렬화할 수 없다 ]
clasee Object implements Serializable{}
-> 모든 클래스가 다 자동으로 객체직렬화 되기 때문(상속때문)
EX1) 직렬화하여 파일 저장
package j0616;
import java.io.*;
// 조건) 객체를 파일로 저장 -> USB -> 전송(네트워크로 전송(파일첨부))
// 직렬화가 가능한 클래스
class Person implements Serializable{
String name;
int age;
String addr;
}
public class Object {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Person p=new Person();
p.name="홍길동";
p.age=34;
p.addr="경기도 광명시";
//파일로 저장 : ObjectOutputStream > FileOutputStream
FileOutputStream fos=
new FileOutputStream("c:/3.java/object.txt"); //파일 객체 생성
ObjectOutputStream oos=new ObjectOutputStream(fos);
//저장하기
oos.writeObject(p);
//매개변수가 object인 자료형은 모든 객체를 저장이 가능하게 만들기 위함
//파일로 저장될 때 Person-> Object형으로 변환돼어 저장된다.
oos.close();
}
}
EX2) 원래 상태로 되돌리기
// 파일로 저장된 객체 가져오기
FileInputStream fis=
new FileInputStream("c:/3.java/object.txt");
ObjectInputStream ois=new ObjectInputStream(fis);
// 읽어들이기(꺼내오기)
// 직렬화된 객체를 다시 되돌리기 위해 원래 객체형으로 형변환
Person p2=(Person)ois.readObject();
System.out.println("이름 : "+p2.name);
System.out.println("나이 : "+p2.age);
System.out.println("주소 : "+p2.addr);
2. 직렬화 대상에서 제외
transient 멤버변수 // 저장이 안됨(=null)
class Person implements Serializable{
String name;
int age;
transient String addr; // 저장이 안됨 =null
}
====콘솔출력
이름 : 홍길동
나이 : 34
주소 : null
1) System.in : 객체(InputStream 표준입력장치)
2) System.out : 멤버변수이면서 객체(PrintStream)
'JAVA > Basic' 카테고리의 다른 글
상속, 오버라이딩 (0) | 2017.06.16 |
---|---|
쓰레드 (0) | 2017.06.16 |
입출력(스트림) 2 (0) | 2017.06.16 |
입출력(스트림) 1 (0) | 2017.06.16 |
객체형변환, 라이브러리 (0) | 2017.06.16 |
Comments