키워드 과도를 사용하여

개요

자바에서 클래스가이 클래스의 직렬화 가능 인터페이스 객체 직렬화 할 수 구현할 수 있습니다,이 시퀀스 모드 개발자 편의를 많이 제공합니다, 우리는 클래스가 구현 직렬화 한, 프로세스의 특정 순서에 대해 걱정하지 않아도 인터페이스는,이 클래스의 모든 속성은 자동으로 직렬화된다. 그러나 때때로 우리는 로컬 작업에 네트워크에서 전송 또는 지속성 싶지 않은, 보안상의 이유로, 같은 암호 정보로, 직렬화되지 않은 클래스의 속성 중 일부를 수 있도록해야합니다. 긴 앞에 해당 속성으로 transient 키워드, 당신은 속성의 라이프 사이클은 디스크 지속성에 기록되지 않습니다 만 발신자의 메모리에 존재하는 속성 중 일부는 직렬화되지 않습니다 달성 할 수있다.

과도의 사용

public class TransientTest {

    public static void main(String[] args) { User user = new User(); user.setUsername("Github"); user.setPassword("123456"); System.out.println("read before Serializable: "); System.out.println("username: " + user.getUsername()); System.err.println("password: " + user.getPassword()); try { ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("user.txt")); os.writeObject(user); // 将User对象写进文件  os.flush(); os.close(); } catch (IOException e) { e.printStackTrace(); } try { ObjectInputStream is = new ObjectInputStream(new FileInputStream("user.txt")); user = (User) is.readObject(); // 从流中读取User的数据  is.close(); System.out.println("\nread after Serializable: "); System.out.println("username: " + user.getUsername()); System.err.println("password: " + user.getPassword()); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } } public class User implements Serializable { private static final long serialVersionUID = 1234567890L; private String username; private transient String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }

운영 결과 :

 

 

정적 변수 과도 변형

public class TransientTest {

    public static void main(String[] args) { User user = new User(); user.setUsername("Github"); user.setPassword("123456"); System.out.println("read before Serializable: "); System.out.println("username: " + user.getUsername()); System.err.println("password: " + user.getPassword()); try { ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("user.txt")); os.writeObject(user); // 将User对象写进文件  os.flush(); os.close(); } catch (IOException e) { e.printStackTrace(); } try { // 在反序列化前盖板username的值  user.setUsername("Tom"); ObjectInputStream is = new ObjectInputStream(new FileInputStream("user.txt")); user = (User) is.readObject(); // 从流中读取User的数据  is.close(); System.out.println("\nread after Serializable: "); System.out.println("username: " + user.getUsername()); System.err.println("password: " + user.getPassword()); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } } public class User implements Serializable { private static final long serialVersionUID = 1234567890L; private static String username; private transient String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }

운영 결과 :

 

 

개요

  1. 변수가 과도 수정되면, 변수 개체 지속성은 더 이상 액세스 할 수 없습니다 직렬화 후 변수 내용의 일부가 될 수 없습니다.
  2. 과도 키워드 변수 만, 방법 및 클래스를 수정할 수는 수정할 수 없습니다. 지역 변수는 과도 키워드를 수정할 수 없습니다. 변수가 사용자 정의 클래스 변수 인 경우, 클래스는 Serializable 인터페이스를 구현해야합니다.
  3. 정적 변수 에 관계없이 변형 일시적인지 여부에 연재되지.

추천

출처www.cnblogs.com/Dmand/p/12077407.html