[오라클자바커뮤니티자바교육강좌강의]자바 객체 직렬화란
객체는 클래스를 통해 필요 한 시기에 생성되며 프로그램이 종료하지 않더라도 소멸된다. 물론 프로그램이 종료하면 사라진다. 실행시간에 유지하고 있던 객체 내부의 정보와 객체 자신의 정보를 어디엔가 기록해 놓고 나중에 필요한 시기에 다시 볼수 있는 방법을 제공하는것이 객체직렬화 이다.
객체의 내용을 화일 혹은 네트워크를 통하여 byte stream으로 입출력
객체를 저장장치(파일, DB)등에 저장, 검색, 로딩 할 수 있도록 함으로서 객체의 영속성 제공
객체의 영속성을 위해 직렬화를 사용하여 꼭 필요한 데이터만 직렬화 하는 경량성을 제공
java.io.Serializable 인터페이스 : 직렬화 가능 여부 판단
java.lang.Object : 직렬화 안된다. 즉 객체를 스트림으로 보낼수 없다.
java.lang.String : 직렬화 가능하며 객체를 스트림으로 보낼수 있다.
Serializable을 구현한 창(Window)를 스트림으로 다른 컴퓨터에 보내는 것이 가능
직렬화 될때 static필드, transient필드는 제외
직렬화의 과정은 인스턴스 변수의 값을 저장하는 일인데 만약 인스턴스 변수가 다른 객체를 참조하고 있는 참조형의 변수일 경우 그 변수가 가리키는 객체 또한 직렬화 되어야 한다. 이렇게 직렬화는 복잡한 Tree형태로 계속 진행된다.
만약 참조형 변수가 가리키는 객체 또는 상위 클래스가 Serializable, Externalizable을 구현 하지 않았다면 직렬화가 되지 않으므로 제한적이나마 직렬화에 포함하기 위해서는 readObject 메소드및 writeObject를 적절히 프로그램 내부에 기록해 줌으로서 제한적이지만 가능한 방법을 제시한다(defaultReadObject, defaultWriteObject를 사용한다.)
ObjectOutput 인테페이스
객체를 출력하기 위한 메쏘드 정의
DataOutput의 하위 인터페이스
writeObject(Object obj)
ObjectOutput 예제
import java.io.*;
class ObjectOutputTest
{
public static void main(String[] args)
{
try {
ObjectOutput s = new ObjectOutputStream(
new FileOutputStream( "objectstream.dat" ) );
s.writeObject( "Today" );
s.writeObject( new java.util.Date() );
s.flush();
} catch( Exception e ) {
e.printStackTrace(); }
}
}
ObjectInput 인터페이스
객체를 입력하기 위한 메쏘드 정의
DataInput의 하위 인터페이스
Object readObject() throws ClassNotFoundException
ObjectInput 예제
import java.io.*;
class ObjectInputTest
{
public static void main(String[] args)
{
try {
ObjectInput s = new ObjectInputStream(
new FileInputStream( "objectstream.dat" ) );
String today = (String) s.readObject();
java.util.Date date = (java.util.Date) s.readObject();
System.out.println(today);
System.out.println(date);
} catch( Exception e ) {
e.printStackTrace(); }
}
}
AWT 직렬화 예제
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class AWTSerTest extends Frame {
TextArea view = new TextArea();
public AWTSerTest() {
add(view, "Center");
}
public static void main(String[] args) {
Frame f = null;
try {
FileInputStream inFile = new FileInputStream("AWTSerTest.ser");
ObjectInput in = new ObjectInputStream(inFile);
f = (Frame)in.readObject();
}
catch(IOException ioe) {
f = new AWTSerTest();
f.setSize(500, 300);
}
catch(ClassNotFoundException e) {
e.printStackTrace();
}
f.addWindowListener( new WindowAdapter() {
public void windowClosing(WindowEvent we) {
try {
FileOutputStream outFile = new FileOutputStream("AWTSerTest.ser");
ObjectOutput out = new ObjectOutputStream(outFile);
out.writeObject(we.getWindow());
out.close();
System.exit(0);
}
catch(IOException e) {
e.printStackTrace();
}
}
});
f.setVisible(true);
}
}
출처:오라클자바커뮤니티, 오엔제이프로그래밍
http://oraclejavanew.kr/bbs/board.php?bo_table=LecJava&wr_id=546
오라클자바커뮤니티 실전추천강좌 - 개인 80% 환급
2013년 9월 5일 목요일
[오라클자바커뮤니티자바교육강좌강의]자바 객체 직렬화란 객체는 클래스를 통해 필요 한 시기에 생성되며 프로그램이 종료하지 않더라도 소멸된다. 물론 프로그램이 종료하면 사라진다. 실행시간에 유지하고 있던 객체 내부의 정보와 객체 자신의 정보를 어디엔가 기록해 놓고 나중에 필요한 시기에 다시 볼수 있는 방법을 제공하는것이 객체직렬화 이다. 객체의 내용을 화일 혹은 네트워크를 통하여 byte stream으로 입출력 객체를 저장장치(파일, DB)등에 저장, 검색, 로딩 할 수 있도록 함으로서 객체의 영속성 제공 객체의 영속성을 위해 직렬화를 사용하여 꼭 필요한 데이터만 직렬화 하는 경량성을 제공 java.io.Serializable 인터페이스 : 직렬화 가능 여부 판단 java.lang.Object : 직렬화 안된다. 즉 객체를 스트림으로 보낼수 없다. java.lang.String : 직렬화 가능하며 객체를 스트림으로 보낼수 있다. Serializable을 구현한 창(Window)를 스트림으로 다른 컴퓨터에 보내는 것이 가능 직렬화 될때 static필드, transient필드는 제외 직렬화의 과정은 인스턴스 변수의 값을 저장하는 일인데 만약 인스턴스 변수가 다른 객체를 참조하고 있는 참조형의 변수일 경우 그 변수가 가리키는 객체 또한 직렬화 되어야 한다. 이렇게 직렬화는 복잡한 Tree형태로 계속 진행된다. 만약 참조형 변수가 가리키는 객체 또는 상위 클래스가 Serializable, Externalizable을 구현 하지 않았다면 직렬화가 되지 않으므로 제한적이나마 직렬화에 포함하기 위해서는 readObject 메소드및 writeObject를 적절히 프로그램 내부에 기록해 줌으로서 제한적이지만 가능한 방법을 제시한다(defaultReadObject, defaultWriteObject를 사용한다.) ObjectOutput 인테페이스 객체를 출력하기 위한 메쏘드 정의 DataOutput의 하위 인터페이스 writeObject(Object obj) ObjectOutput 예제 import java.io.*; class ObjectOutputTest { public static void main(String[] args) { try { ObjectOutput s = new ObjectOutputStream( new FileOutputStream( "objectstream.dat" ) ); s.writeObject( "Today" ); s.writeObject( new java.util.Date() ); s.flush(); } catch( Exception e ) { e.printStackTrace(); } } } ObjectInput 인터페이스 객체를 입력하기 위한 메쏘드 정의 DataInput의 하위 인터페이스 Object readObject() throws ClassNotFoundException ObjectInput 예제 import java.io.*; class ObjectInputTest { public static void main(String[] args) { try { ObjectInput s = new ObjectInputStream( new FileInputStream( "objectstream.dat" ) ); String today = (String) s.readObject(); java.util.Date date = (java.util.Date) s.readObject(); System.out.println(today); System.out.println(date); } catch( Exception e ) { e.printStackTrace(); } } } AWT 직렬화 예제 import java.awt.*; import java.awt.event.*; import java.io.*; class AWTSerTest extends Frame { TextArea view = new TextArea(); public AWTSerTest() { add(view, "Center"); } public static void main(String[] args) { Frame f = null; try { FileInputStream inFile = new FileInputStream("AWTSerTest.ser"); ObjectInput in = new ObjectInputStream(inFile); f = (Frame)in.readObject(); } catch(IOException ioe) { f = new AWTSerTest(); f.setSize(500, 300); } catch(ClassNotFoundException e) { e.printStackTrace(); } f.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent we) { try { FileOutputStream outFile = new FileOutputStream("AWTSerTest.ser"); ObjectOutput out = new ObjectOutputStream(outFile); out.writeObject(we.getWindow()); out.close(); System.exit(0); } catch(IOException e) { e.printStackTrace(); } } }); f.setVisible(true); } }
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기