Javase 지식 포인트 16java 서열화

3614 단어

무엇이 서열화와 반서열화입니까?

  • 1 서열화(serialization)는 대상을 일련의 바이트로 묘사하는 과정이다.
  • 2 반서열화(Deserialization)는 이 바이트를 하나의 대상으로 재구성하는 과정이다.

  • 어떤 상황에서 서열화가 필요합니까?

  • 1 메모리에 있는 대상을 파일이나 데이터베이스에 저장하고 싶을 때(데이터가 지속됨).
  • 2 서열화를 이용하여 원격 통신, 즉 네트워크에서 대상을 전송하는 바이트 서열을 실현한다.

  • 어떻게 서열화를 실현합니까?

  • 1은 서열화된 클래스가 필요한serializable 인터페이스를 실현하면 된다. Serializable 인터페이스에는 어떤 방법도 없고 하나의 표시로 이해할 수 있다. 즉, 이 클래스가 서열화될 수 있음을 나타낸다.
  • 2 먼저 일부 OutputStream(예를 들어 File OutputStream, Byte Array OutputStream 등)을 만들어야 한다.
  • 3 그리고 이 OutputStream들을 Object OutputStream에 봉인합니다.이럴 때 write Object () 방법을 사용하면 대상을 서열화하여 OutputStream에 보낼 수 있습니다. (대상의 서열화는 바이트 기반이고 Reader와 Writer 등 문자 기반 차원 구조를 사용할 수 없습니다.)
  • 4의 반시퀀스 과정(예를 들어 FileInputstream, ByteArrayInputStream 등)을 ObjectInputStream에 봉인한 다음readObject()를 호출하면 됩니다.
  • package com.serialize;  
      
    import java.io.FileInputStream;  
    import java.io.FileNotFoundException;  
    import java.io.FileOutputStream;  
    import java.io.IOException;  
    import java.io.ObjectInputStream;  
    import java.io.ObjectOutputStream;  
    import java.io.Serializable;  
      
    public class Serialize implements Serializable{  
      
        private static final long serialVersionUID = -5211389707739541364L;  
        public int num = 1390;  
      
        public void serialized()  
        {  
            try {  
                FileOutputStream fos = new FileOutputStream("serialize.obj");  
                ObjectOutputStream oos = new ObjectOutputStream(fos);  
                Serialize serialize = new Serialize();  
                oos.writeObject(serialize);  
                oos.flush();  
                oos.close();// , finally , 。  
                fos.close();  
                System.out.println(" ");  
            } catch (FileNotFoundException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
      
        public void deserialized()  
        {  
            Serialize serialize = null;  
            try  
            {  
                FileInputStream fis = new FileInputStream("serialize.obj");  
                ObjectInputStream ois = new ObjectInputStream(fis);  
      
                serialize = (Serialize) ois.readObject();  
                ois.close();  
                fis.close();  
                System.out.println(" ");  
            }  
            catch (ClassNotFoundException | IOException e)  
            {  
                e.printStackTrace();  
            }  
            System.out.println(serialize.num);  
        }  
      
        public static void main(String[] args)   
        {  
            Serialize serialize = new Serialize();  
            serialize.serialized();  
            serialize.deserialized();  
        }  
    }  
    

    실행 결과는 다음과 같습니다.
       
       
    1390  
    

    서열화 총결산

  • 1 서열화 작업을 통해 우리는 모든 Serializable 대상에 대한'심도 복제(deep copy)'를 실현할 수 있다. 이것은 우리가 복제한 것은 전체 대상망이지 기본 대상과 인용이 아니라는 것을 의미한다
  • .
  • 2 변수가transient에 의해 수식되면 변수는 더 이상 대상의 지속화의 일부분이 아니며 이 변수의 내용은 서열화된 후에 접근할 수 없습니다.
  • 3 transient 키워드는 변수만 수식할 수 있고 방법과 클래스는 수식할 수 없습니다.로컬 변수는transient 키워드에 의해 수식될 수 없습니다.변수가 사용자 정의 클래스 변수라면, 이 클래스는serializable 인터페이스를 실현해야 합니다.
  • 4 정적 변수는transient에 의해 수식되었든 안 되었든 서열화될 수 없습니다.
  • 5 부류가 Serializable 인터페이스를 계승할 때 모든 부류는 서열화될 수 있다.
  • 6 서브클래스는 Serializable 인터페이스를 실현했고 부류가 없으며 부류의 속성은 서열화될 수 없고 오류를 보고하지 않으며 데이터는 잃어버리지 않습니다.
  • 7 서열화된 속성이 대상이라면 이 대상도serializable 인터페이스를 실현해야 합니다. 그렇지 않으면 오류가 발생합니다.
  • 8 반서열화 시 대상의 속성이 수정되거나 삭제되면 수정된 일부 속성은 잃어버리지만 오류가 발생하지 않습니다.
  • 9 는 반서열화할 때 serialVersionUID가 서열화되면 반서열화할 때 실패합니다.
  • 좋은 웹페이지 즐겨찾기