직렬화 중에 정적 변수의 값을 유지하는 방법 (전혀 유지되는 경우) 나는 정적 변수가 본질적으로 일시적이라고 말하면서 스택에 비슷한 질문을 읽었다. 즉, 상태 또는 현재 값이 직렬화되지 않는다.java 정적 변수 직렬화
저는 클래스를 직렬화하고 파일에 저장 한 다음 파일에서 클래스를 다시 생성하는 간단한 예제를 수행했습니다. 놀랍게도 직렬화가 발생했을 때 정적 변수의 값이 저장되었습니다.
어떻게 될까요? 이는 클래스 템플릿이 인스턴스 정보와 함께 직렬화 중에 저장되기 때문입니다. 여기에 코드입니다 - 여기
public class ChildClass implements Serializable, Cloneable{
/**
*
*/
private static final long serialVersionUID = 5041762167843978459L;
private static int staticState;
int state = 0;
public ChildClass(int state){
this.state = state;
staticState = 10001;
}
public String toString() {
return "state" + state + " " + "static state " + staticState;
}
public static void setStaticState(int state) {
staticState = state;
}
및 것은
public class TestRunner {
/**
* @param args
*/
public static void main(String[] args) {
new TestRunner().run();
}
public TestRunner() {
}
public void run() {
ChildClass c = new ChildClass(101);
ChildClass.setStaticState(999999);
FileOutputStream fo = null;
ObjectOutputStream os = null;
File file = new File("F:\\test");
try {
fo = new FileOutputStream(file);
os = new ObjectOutputStream(fo);
os.writeObject(c);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if(null != os)os.close();
if(null != fo) fo.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
FileInputStream fi = null;
ObjectInputStream ois = null;
ChildClass streamed;
try {
fi = new FileInputStream(file);
ois = new ObjectInputStream(fi);
Object o = ois.readObject();
if(o instanceof ChildClass){
streamed = (ChildClass)o;
//ChildClass cloned = streamed.clone();
System.out.println(streamed.toString());
}
} catch (IOException | ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if(null != ois)ois.close();
if(null != fi) fi.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
주 내 주요 클래스 : 코드 아무 문제가 없습니다. 방금 'ChildClass'클래스의 정적 변수 'staticState'의 값이 저장되는 방법에 대해 궁금합니다. 네트워크를 통해이 직렬화 된 데이터를 전송하면 상태가 저장됩니까
가능한 중복이 아닌 것을 알하려면 (http://stackoverflow.com/questions/3147811/serialize-static-attributes-in-java). 이 질문이 적절한 복제본인지 아닌지는 아직 확실하지 않기 때문에 질문을 "속이 망치질"하지 않았습니다. –
비록 내 질문에 정적 변수의 직렬화에 관련되어 있지만 내 질문에 실제로는 표준 문서 당 않습니다 것으로 나타납니다 행동에 있습니다. – Dibzmania