직렬화입니다 변환하는 프로세스 개체 시퀀스로의 바이트를 지속할 수 있는 디스크 또는 데이터베이스 또는 전송할 수 있을 통해 스트림이 있습니다. 바이트 시퀀스에서 객체를 만드는 역 프로세스를 역 직렬화라고합니다.
클래스는 객체를 성공적으로 직렬화하기 위해java.io
패키지에 존재하는 직렬화 가능 인터페이스를 구현해야합니다., Serializable 은이를 구현하는 클래스에 serializable 동작을 추가하는 마커 인터페이스입니다.
Java 제공하는 직렬화 캡슐화된 API 에서java.io
패키지를 직렬화하기 위한 나열체를 포함하는,
java.io.serializable
java.io.Externalizable
ObjectInputStream
ObjectOutputStream
Java 마커의 인터페이스
마커의 인터페이스가 특별한 인터페이스에서 Java 없이 어떤 분야와 방법입니다., 마커 인터페이스는 컴파일러에게 그것을 구현하는 클래스가 어떤 특별한 행동이나 의미를 가지고 있음을 알리는 데 사용됩니다. 몇 가지 예를 들어 마커의 인터페이스는,
java.io.serializable
java.lang.Cloneable
java.rmi.Remote
java.util.RandomAccess
이러한 모든 인터페이스하지 않는 어떤 방법과 필드입니다. 그들은 단지 그들을 구현하는 클래스에 특별한 동작을 추가합니다. 그러나 마커 인터페이스는 Java5 이후 사용되지 않았으며 주석으로 대체되었습니다., 주석은 마커 인터페이스가 이전에했던 것과 똑같은 역할을하는 마커 인터페이스 대신에 사용됩니다.
직렬화 및 직렬화를 구현하기 위해 Java 는 ObjectOutputStream 과 ObjectInputStream 의 두 가지 클래스를 제공합니다.
ObjectOutputStream class
객체 상태를 파일에 쓰는 데 사용됩니다. Java.io.Serializable 인터페이스를 구현하는 객체는 strams 에 쓸 수 있습니다. 직렬화를 수행하는 다양한 방법을 제공합니다.
ObjectInputStream 클래스
ObjectInputStream 은 ObjectOutputStream 을 사용하여 작성된 객체와 원시 데이터를 직렬화 해제합니다.,
writeObject()및 readObject()메
writeObject()
의 방법을ObjectOutputStream
클래스를 직렬화하는 개체를 보내는 출력 스트림입니다.
public final void writeObject(object x) throws IOException
readObject()
의 방법을ObjectInputStream
클래스를 참조체의 스트림 강습니다.
public final Object readObject() throws IOException,ClassNotFoundException
를 직렬화하는 동안 당신이 원하지 않는 경우 모든 분야의 일부 개체 상태는 다음을 선언하는 정적 또는 일시적인 필요에 따라고 포함되지 않습니다 동안 자바 serialization 과정입니다.,
예:를 직렬화하는 개체에서 Java
이 예제에서,우리는 우리를 구현하는 클래스 Serializable 인터페이스를 만들 그 자체를 직렬화됩니다.
Studentinfo 클래스의 객체는writeObject()
메소드를 사용하여 직렬화되고student.txt
파일에 기록됩니다.
예:직렬화체에서 Java
를 직렬화 개체,우리가 사용하는 ObjectInputStream 클래스를 읽는 객체에 지정된 파일에 기록됩니다. 아래 예제를 참조하십시오.,
Abhi104null
연락처 필드 null 기 때문에,그것은 표시되었으로 정적으로 우리는 앞에서 설명한 정적 필드되지 않는 직렬화됩니다.
참고:정적 멤버는 클래스의 객체가 아닌 클래스에 연결되어 있기 때문에 직렬화되지 않습니다.
일시적인 키워드
는 직렬화하는 개체는 경우에,우리는 원하지 않는 특정 데이터 멤버의 객체를 직렬화할 우리는 그것을 언급한 일시적이다. 일시적인 키워드는 해당 데이터 멤버가 직렬화되는 것을 방지합니다.,
class studentinfo implements Serializable { String name; transient int rid; static String contact;}
- 데이터 멤버 만들기
transient
는 직렬화를 방지합니다. - 이 예제에서는
rid
되지 않는 직렬화하기 때문에 그것은 일시적이,그리고contact
남아 unserialized 기 때문에 고정되어 있습니다.나는 이것이 내가 할 수있는 유일한 방법이라고 생각한다.