JavaRush /Java Blog /Random-KO /인터페이스 - 마커
dupliaka
레벨 29
Санкт-Петербург

인터페이스 - 마커

Random-KO 그룹에 게시되었습니다
마커 인터페이스는 인터페이스와 클래스를 연결할 수 있는 런타임 유형 검사 기능이 포함된 디자인 패턴입니다. 이것이 필요한 이유를 이해하려면 Serializible 클래스를 마커로 표시하는 예를 고려하십시오. 객체의 상태를 메모리에 저장한 다음 저장한 내용을 해독할 수 있어야 한다고 가정해 보겠습니다. 그런 다음 개체를 비트 집합으로 변환할 수 있다고 말씀하셨습니다. 오른쪽. FileInputStream을 사용하여 파일에 쓰는 간단한 방법을 사용할 수 있지만 이는 개체가 적을 때만 편리하지만 개체가 많으면 어떻게 될까요? 이를 위한 훌륭한 직렬화 도구가 있습니다. 이를 사용할 때의 주요 규칙은 직렬화되는 개체가 모든 데이터를 포함해야 하며 다른 개체를 참조해서는 안 된다는 것입니다. 클래스를 보세요. "아하, 필드가 참조되지 않고 직렬화 가능 마커를 넣는 것이 좋습니다." 그리고 이를 넣으면 표시한 개체가 ObjectOutputStream에 기록될 수 있음을 의미합니다. ObjectOutputStream 클래스에는 writeObject0() 메서드가 있으며, 여기에는 객체를 쓸 수 있는지 여부를 확인하는 검사 인스턴스가 포함되어 있으며, 전체 검사가 실패하면 NotSerializedException 예외가 발생하고, 그렇지 않은 경우 모든 것이 깔끔하게 메모리에 기록됩니다. 직렬화할 인스턴스인 BigObject 클래스를 생성해 보겠습니다. package post1; import java.io.Serializable; public class BigObject implements Serializable { private int id; public void setId(final int id){ this.id = id; } public int getId() { return id; } } BigObject 클래스는 이미 직렬화 가능으로 표시되어 있습니다. 여기에는 하나의 ID 필드와 함께 제공되는 get/set 메소드가 있습니다. package post1; import post1.BigObject; import java.io.*; public class InterfaceMarker { public static void main(String[] args) throws IOException, ClassNotFoundException { int originalId = 12; BigObject objectOriginal = new BigObject(); objectOriginal.setId(originalId); ByteArrayOutputStream writeBuffer = new ByteArrayOutputStream(); ObjectOutputStream outputStream = new ObjectOutputStream(writeBuffer); outputStream.writeObject(objectOriginal); outputStream.close(); byte[] buffer = writeBuffer.toByteArray(); ByteArrayInputStream readBuffer = new ByteArrayInputStream(buffer); ObjectInputStream inputStream = new ObjectInputStream(readBuffer); BigObject objectCopy = (BigObject)inputStream.readObject(); if (objectCopy.getId() == originalId) System.out.println( "originalId equals copiedId"); } }

객체 기록

먼저 직렬화 가능 클래스 BigObject의 객체를 생성한 다음 이를 위한 데이터 버퍼를 준비합니다. 여기에 모든 활 ByteArrayOutputStream을 배치할 장소입니다. 그런 다음 이미 언급한 ObjectOutputStream을 준비하고 여기에 버퍼를 전달한 다음 개체를 스트림에 쓰고 닫습니다.

객체 읽기

쓰기 버퍼 readBuffer를 준비하고, inputStream을 전달하고, readObject()를 읽어 봅시다. 이제 개체가 복원되었습니다. 'id' 필드가 링크가 아니었기 때문에 데이터가 완전히 포함된 직렬화 가능 클래스를 표시할 수 있었습니다. 클래스 내에 유효성 검사 기능을 추가하는 대신 토큰을 사용하면 클래스 유효성 검사 프로세스를 단순화할 수 있습니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION