본문 바로가기

Java

[Stream] 수동 직렬화


public class ManualSerializedHandle {
 private int id;
 private long type;
 private float weight;
 
 public static void main(String[] args) throws Exception {
  ManualSerializedHandle msh = new ManualSerializedHandle();
  msh.setManualSerializedHandle(100, 2000000, 3.14F);
  
  System.out.println(msh.toString() + ":" + msh.getManualSerializedHandle());
  
  msh.saveManualSerializedHandle("d:/manualserial.txt");
  
  ManualSerializedHandle r = ManualSerializedHandle.restoreManualSerializedHandle("d:/manualserial.txt");
  System.out.println(r.toString() + ":" + r.getManualSerializedHandle());
 }
 
 public void setManualSerializedHandle(int id, long type, float weight) {
  this.id = id;
  this.type = type;
  this.weight = weight;
 }
 
 public String getManualSerializedHandle() {
  return id + "," + type + "," + weight;
 }
 
 public void saveManualSerializedHandle(String fileName) throws IOException {
  FileWriter fw = new FileWriter(fileName);
  BufferedWriter bw = new BufferedWriter(fw);
  bw.write("ManualSerializedHandle\n");
  bw.write(id + "\n");
  bw.write(type + "\n");
  bw.write(weight + "\n");
  bw.close();
 }
 
 public static ManualSerializedHandle restoreManualSerializedHandle(String filename) throws IOException{
  FileReader fr = new FileReader(filename);
  BufferedReader br = new BufferedReader(fr);
  String temp = br.readLine();
  ManualSerializedHandle memObj = new ManualSerializedHandle();
  if(temp.equals("ManualSerializedHandle")){
   int i = Integer.parseInt(br.readLine());
   long t = Long.parseLong(br.readLine());
   float w = Float.parseFloat(br.readLine());
   memObj.setManualSerializedHandle(i, t, w);
  }
  br.close();
  return memObj;
 }

}

코드출처 : jabook.org

이것은 단순히 text 파일에 클래스명과
field : value를 저장해 두고
사용하는 곳에서 위의 text 파일을 읽어들여서
클래스명과 value를 통해 새로운 객체를 생성하는 것이다.

RMI 같은 경우는 객체 그 자체를 스트림을 통해 주고받지만 이것은
완전히 다른 방식이다.

위 소스를 실행 하면

com.devyongsik.edu.stream.ManualSerializedHandle@de6ced:100,2000000,3.14
com.devyongsik.edu.stream.ManualSerializedHandle@c17164:100,2000000,3.14

이렇게 콘솔에 출력된다. 다른 객체란 얘기고... 파일을 보면

ManualSerializedHandle
100
2000000
3.14

이렇게 들어가 있게 된다.