SerialVersionUID, ObjectInputStream과 ObjectOutputStream 클래스, Serializable 인터페이스, SerialVersionUID의 역할과 사용 방법
Serializable은 사실 빈 인터페이스입니다.
package java.io;
public interface Serializable {
}
Serializable는 빈 인터페이스로 구체적인 내용이 없고 클래스를 간단하게 표시하는 대상이 서열화될 수 있도록 하는 목적이 있습니다.어떤 상황에서 서열화가 필요합니까a) 메모리의 대상을 하드디스크에 기록하고 싶을 때;
b) 당신이 소켓로 인터넷에서 대상을 전송하고 싶을 때;
c) RMI를 통해 개체를 전송하고 싶을 때다시 한 번 설명하자면 a) 예를 들어 당신의 메모리가 부족하면 컴퓨터는 메모리 안의 일부 대상을 하드디스크에 잠시 저장하고 사용할 때 메모리에 읽어야 한다. 하드디스크의 그 부분 저장 공간은 이른바 가상 메모리이다.예를 들어 특정한 대상을 파일에 저장하려면 며칠 간격으로 그것을 꺼내서 사용해야 한다. 그러면 이때 실현해야 한다Serializable 인터페이스.
public static void main(String args[]) throws Exception {
class Student implements Serializable {
private static final long serialVersionUID = 0xbc9903f7986df52fL;
String name;
int id ;
int age;
String department;
public Student(String name, int id, int age, String department) {
this.age = age;
this.department = department;
this.id = id;
this.name = name;
}
}
Student s1=new Student(" 2 ", 1, 5, " ");
Student s2=new Student(" 1", 2, 9, " ");
FileOutputStream fout = new FileOutputStream("C:\\student.txt");
ObjectOutputStream out=new ObjectOutputStream(fout);
out.writeObject(s1);
out.writeObject(s2);
out.close();
FileInputStream fin=new FileInputStream("C:\\student.txt");
ObjectInputStream in=new ObjectInputStream(fin);
try {
s1=(Student) in.readObject();
s2=(Student) in.readObject();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
in.close();
System.out.print("name:"+s1.name);
System.out.print(" id:"+s1.id);
System.out.print(" age:"+s1.age);
System.out.println(" department:"+s1.department);
System.out.print("name:"+s2.name);
System.out.print(" id:"+s2.id);
System.out.print(" age:"+s2.age);
System.out.println(" department:"+s2.department);
}
상단 은 서열화 반서열화 의 예 이다그리고 우리는 다음과 같은 몇 가지 문제를 고려한다
문제1: A단과 B단이 있다고 가정하면 2곳의 SerialVersionUID가 일치하지 않으면 어떤 오류가 발생합니까?
문제2: 두 곳의 SerialVersionUID가 일치한다고 가정하면 A단에 한 필드가 추가되고 B단이 변하지 않는다면 어떤 상황일까요?
문제3: 두 곳의 SerialVersionUID가 일치한다고 가정하면 B단에 한 필드가 추가되고 A단이 변하지 않는다면 어떤 상황일까요?
문제4: 두 곳의 SerialVersionUID가 일치한다고 가정하면 A단이 한 필드를 줄이고 B단이 변하지 않는다면 어떤 상황일까요?
문제5: 두 곳의 SerialVersionUID가 일치한다고 가정하면 B단이 한 필드를 줄이고 A단이 변하지 않는다면 어떤 상황일까요?
문제 발생: serialVersionUID의 역할 및 사용 방법
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.