Java 객체의 XML 직렬화 및 역직렬화에 대한 자세한 소개
이 글은 주로 Java 객체의 XML 직렬화 및 역직렬화 예제 분석을 소개합니다. 편집자는 이것이 꽤 좋다고 생각하므로 여기에서 공유하겠습니다.
이전 글에서는 Java로 구현된 다양한 정렬 알고리즘의 코드 예제를 소개했습니다. 이번 글에서는 Java 객체의 XML 직렬화 및 역직렬화 관련 내용을 살펴보겠습니다.
XML은 애플리케이션 간에 다양한 유형의 데이터를 교환하는 데 쉽게 사용할 수 있는 표준 데이터 교환 사양입니다. Java 객체의 XML 직렬화 및 역직렬화와 같은 특정 매핑이 Java 객체와 XML 문서 간에 설정될 수 있다면 Java 객체는 다른 애플리케이션과 쉽게 교환될 수 있습니다.
java.beans 패키지에는 XML의 JabaBeans 사양을 준수하는 Java 개체를 직렬화 및 역직렬화하는 데 사용되는 두 가지 클래스 XMLEncoder 및 Decoder가 있습니다. 다음 코드는 이 두 클래스를 사용하여 Java 객체의 XML 인코딩 및 디코딩을 구현하는 방법을 보여줍니다.
직렬화할 Java 클래스:
import java.io.Serializable; public class SerialableObject implements Serializable { private static final long serialVersionUID = 8745578444312339136L; public SerialableObject() { } public SerialableObject(int id, String name, double value) { this.id = id; this.name = name; this.value = value; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getValue() { return value; } public void setValue(double value) { this.value = value; } private int id; private String name; private double value; }
XML 직렬화 및 역직렬화 사용법 데모 클래스:
import java.beans.XMLDecoder; import java.beans.XMLEncoder; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import java.util.Vector; public class XmlSerialize { public XmlSerialize() { } public void serializeSingleObject(OutputStream os, Object obj) // 序列化单个java对象 { // XMLEncoder xe = new XMLEncoder(os); XMLEncoder xe = new XMLEncoder(os, "GBK", true, 0); // 仅用于Java SE 7 xe.writeObject(obj); // 序列化成XML字符串 xe.close(); } public Object deserializeSingleObject(InputStream is) // 反序列化单个Java对象 { XMLDecoder xd = new XMLDecoder(is); Object obj = xd.readObject(); // 从XML序列中解码为Java对象 xd.close(); return obj; } public void serializeMultipleObject(OutputStream os, List<Object> objs) // 序列化多个Java对象 { XMLEncoder xe = new XMLEncoder(os); xe.writeObject(objs); // 序列化成XML字符串 xe.close(); } public List<Object> deserializeMultipleObject(InputStream is) // 反序列化多个Java对象 { XMLDecoder xd = new XMLDecoder(is); @SuppressWarnings("unchecked") List<Object> objs = (List<Object>)xd.readObject(); // 从XML序列中解码为Java对象列表 xd.close(); return objs; } public void runSingleObject() { File xmlFile = new File("object.xml"); SerialableObject jo4Out = new SerialableObject(1, "Java序列化为XML", 3.14159265359); // 创建待序列化的对象 try { FileOutputStream ofs = new FileOutputStream(xmlFile); // 创建文件输出流对象 serializeSingleObject(ofs, jo4Out); ofs.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { FileInputStream ifs = new FileInputStream(xmlFile); SerialableObject jo4In = (SerialableObject)deserializeSingleObject(ifs); System.out.println("id: " + jo4In.getId()); System.out.println("name: " + jo4In.getName()); System.out.println("value: " + jo4In.getValue()); } catch (FileNotFoundException e) { e.printStackTrace(); } } public void runMultipleObject() { File xmlFile = new File("objects.xml"); List<SerialableObject> sos4Out = new Vector<SerialableObject>(); sos4Out.add(new SerialableObject(1, "Java序列化为XML - 1", 3.14)); // 创建待序列化的对象 sos4Out.add(new SerialableObject(2, "Java序列化为XML - 2", 3.14159)); // 创建待序列化的对象 sos4Out.add(new SerialableObject(3, "Java序列化为XML - 3", 3.1415926)); // 创建待序列化的对象 sos4Out.add(new SerialableObject(4, "Java序列化为XML - 4", 3.141592653)); // 创建待序列化的对象 sos4Out.add(new SerialableObject(5, "Java序列化为XML - 5", 3.14159265359)); // 创建待序列化的对象 try { FileOutputStream ofs = new FileOutputStream(xmlFile); // 创建文件输出流对象 serializeSingleObject(ofs, sos4Out); ofs.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { FileInputStream ifs = new FileInputStream(xmlFile); @SuppressWarnings("unchecked") List<SerialableObject> sos4In = (List<SerialableObject>)deserializeSingleObject(ifs); for (SerialableObject jo4In : sos4In) { System.out.println("id: " + jo4In.getId()); System.out.println("name: " + jo4In.getName()); System.out.println("value: " + jo4In.getValue()); } } catch (FileNotFoundException e) { e.printStackTrace(); } } public static void main(String[] args) { XmlSerialize xs = new XmlSerialize(); xs.runSingleObject(); xs.runMultipleObject(); } }
직렬화할 클래스는 JavaBeans 형식 사양을 준수해야 한다는 점에 유의해야 합니다. : 매개변수가 없는 공용 생성자를 가지며 모든 데이터 멤버는 getter/setter 모드에서 액세스됩니다. 또한 이 클래스는 공용이어야 하며 java.io.Serialized 인터페이스를 구현해야 합니다.
프로그램이 실행되면 두 개의 파일이 생성됩니다.
object.xml은 단일 SerialableObject의 값을 저장하는 runSingleObject 메서드에 의해 생성됩니다.
<?xml version="1.0" encoding="GBK"?> <java version="1.7.0" class="java.beans.XMLDecoder"> <object class="SerialableObject"> <void property="id"> <int>1</int> </void> <void property="name"> <string>Java序列化为XML</string> </void> <void property="value"> <double>3.14159265359</double> </void> </object> </java>
objects.xml이 생성됩니다. runMultipleObject 메소드를 통해 5개의 SerializedObject 값을 저장합니다:
<?xml version="1.0" encoding="GBK"?> <java version="1.7.0" class="java.beans.XMLDecoder"> <object class="java.util.Vector"> <void method="add"> <object class="SerialableObject"> <void property="id"> <int>1</int> </void> <void property="name"> <string>Java序列化为XML - 1</string> </void> <void property="value"> <double>3.14</double> </void> </object> </void> <void method="add"> <object class="SerialableObject"> <void property="id"> <int>2</int> </void> <void property="name"> <string>Java序列化为XML - 2</string> </void> <void property="value"> <double>3.14159</double> </void> </object> </void> <void method="add"> <object class="SerialableObject"> <void property="id"> <int>3</int> </void> <void property="name"> <string>Java序列化为XML - 3</string> </void> <void property="value"> <double>3.1415926</double> </void> </object> </void> <void method="add"> <object class="SerialableObject"> <void property="id"> <int>4</int> </void> <void property="name"> <string>Java序列化为XML - 4</string> </void> <void property="value"> <double>3.141592653</double> </void> </object> </void> <void method="add"> <object class="SerialableObject"> <void property="id"> <int>5</int> </void> <void property="name"> <string>Java序列化为XML - 5</string> </void> <void property="value"> <double>3.14159265359</double> </void> </object> </void> </object> </java>
Summary
위 내용은 Java 객체의 XML 직렬화 및 역직렬화에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java의 난수 생성기 안내. 여기서는 예제를 통해 Java의 함수와 예제를 통해 두 가지 다른 생성기에 대해 설명합니다.

Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

Java는 초보자와 숙련된 개발자 모두가 배울 수 있는 인기 있는 프로그래밍 언어입니다. 이 튜토리얼은 기본 개념부터 시작하여 고급 주제를 통해 진행됩니다. Java Development Kit를 설치한 후 간단한 "Hello, World!" 프로그램을 작성하여 프로그래밍을 연습할 수 있습니다. 코드를 이해한 후 명령 프롬프트를 사용하여 프로그램을 컴파일하고 실행하면 "Hello, World!"가 콘솔에 출력됩니다. Java를 배우면 프로그래밍 여정이 시작되고, 숙달이 깊어짐에 따라 더 복잡한 애플리케이션을 만들 수 있습니다.
