평론 대상 중의 구성원 서열화 문제

3709 단어 snakespirittechnology
Java 객체 시리얼화 시 시리얼화에 참여하는 내용은 다음과 같은 몇 가지 측면을 포함합니다.
첫째, 속성은 기본 데이터 형식, 수조 및 기타 대상의 응용을 포함한다.
둘째, 유형명.
서열화될 수 없는 내용은 다음과 같은 몇 가지가 있다.
첫째, 방법.
둘째, static 수식의 속성이 있다.
셋째,transient 수식의 속성이 있다.
서열화 과정에서 현재 클래스 대상의 데이터를 보존할 뿐만 아니라 대상이 인용한 모든 대상의 데이터를 귀속적으로 보존한다.전체 대상의 차원을 바이트 흐름에 쓴다. 이것이 바로 서열화된 대상의 '심도 복제', 즉 복제 대상 자체와 인용된 대상 자체이다.하나의 대상을 서열화하면 전체 대상의 서열을 얻을 수 있습니다.
서열화 과정에서 일부 속성 값이 비교적 민감하거나(예를 들어 암호) 일부 속성 값의 정보량이 비교적 많기 때문에 그들은 네트워크에서 전달하거나 디스크에 저장할 필요가 없다. 즉, 서열화에 참여할 필요가 없다.이러한 속성은 정의할 때transient 키워드를 추가하면 됩니다.transien 속성 서열화 메커니즘은 파일에 쓰지 않고 넘어가지만 읽을 때도 복구할 수 없습니다. 이 속성 값은 기본 초기화 값을 유지합니다.
나는 다음과 같은 코드를 간단하게 썼다.
첫째, 시리얼화된 유형 Picture 정의
       
public class Picture implements Serializable {

	private static final long serialVersionUID = 1L;

	private String name;
	private String category;
	private transient String url;
	private static int width;
	private static int length;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getCategory() {
		return category;
	}

	public void setCategory(String category) {
		this.category = category;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public static int getWidth() {
		return width;
	}

	public static void setWidth(int width) {
		Picture.width = width;
	}

	public static int getLength() {
		return length;
	}

	public static void setLength(int length) {
		Picture.length = length;
	}

	@Override
	public String toString() {
		return " :" + name + ",  :" + category + ", URL=" + url + ",  =" + length + ",  =" + width;
	}
	
}

둘째, Picture 객체 읽기 및 쓰기
       
/**
 *  main , write() read(), ======= :baby,  :Portraits, URL=null,  =128,  =256
* write(), read(), ======= :baby, :Portraits, URL=null, =0, =0 * @author gsucbiao * * @date 2011-9-5 && 11:41:55 */ public class InputAndOutputPicture { public static void main(String[] args) { InputAndOutputPicture ps = new InputAndOutputPicture(); try { // ps.write(); ps.read(); } catch (Exception e) { e.printStackTrace(); } } private void read() { FileInputStream fis = null; ObjectInputStream ois = null; try { fis = new FileInputStream("E://picture.txt"); ois = new ObjectInputStream(fis); Picture picture = (Picture) ois.readObject(); System.out.println("=======" + picture.toString()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { try { fis.close(); ois.close(); } catch (IOException e) { e.printStackTrace(); } } } private void write() { FileOutputStream fos = null; ObjectOutputStream oos = null; try { fos = new FileOutputStream("E://picture.txt"); oos = new ObjectOutputStream(fos); Picture picture = new Picture(); picture.setName("baby"); picture.setCategory("Portraits"); picture.setUrl("http://www.snakespirit.picture/baby.jpg"); picture.setLength(128); picture.setWidth(256); oos.writeObject(picture); oos.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { fos.close(); oos.close(); } catch (IOException e) { e.printStackTrace(); } } } }

상기 테스트를 통해 알 수 있듯이 url 속성이transient 키워드에 수식되었을 때 이 속성 값은 파일의 읽기와 쓰기 작업에 참여하지 않는다.static 키워드로 장식된length,width도 서열화 과정에 참여하지 않았다.

좋은 웹페이지 즐겨찾기