对象的序列化
序列化就是保存对象中的状态(即类中的属性),就是将对象的实例变量和引用变量存储成为磁盘中的一个文件,以便以后重新使用该对象的时候不用再重新创建。而解序列化就是恢复对象的状态,读取磁盘中的序列化文件,将每项状态赋值给对象,并被新的引用变量引用。
在对象被序列化时,该对象所引用的实例变量都会被序列化。
当然我们也能把一个类序列化,方法就是将该类实现Serialization接口,这个接口没有需要实现的方法,只是用来告诉虚拟机实现这个接口的类都可以被序列化。
如果在被序列化的类中有未实现序列化的类的实例对象,有点拗口;换个说法,就是在类Dog中有类Student的实例变量,类Dog实现了Serialization接口,而Student类没有实现,这时候如果将类Dog序列化,执行期会抛出异常。这时我们就需要transient(瞬时)来标记住不需要和不应该序列化的变量,使用transient需要先import java.net.*。在还原的时候被transient的引用变量值会变为null,primitive主数据类型变量会被还原成默认值。
静态变量是不可被序列化的,因为静态变量是在类上面的变量。
记得用JDK里面的serialver工具来查询类的seriaVersionUID(版本ID)。
再还原对象时会比对该对象的类的版本ID如果不对就会还原失败,一般这个值都被标记为final static 存在类中。
序列化的流程如下:
⑴先创建出FileOutputString对象,该对象用来存取生成的文件。
FileOutputStream fs=new FileOutputStream(“test.ser”);
test.ser就是生成的文件名,在字符串中你可以定义要输出的文件的路径。例如D:\\javaserialization\\test.ser
好像必须要双反斜杠,不然会报错。
⑵创建ObjectOutputStream对象,将你所需要序列化的对象写入FileOutputString对象fs。
ObjectOutputStream oos=new ObjectOutputStream (fs);
传入fs。
⑶将对象的引用变量名写入ObjectOutputStream对象的writerObject方法中。
oos.writerObjec(test);
test就是被序列化的对象的引用变量名。
即Object test=new Object();
⑷最后不要玩了关闭ObjectOutputStream。
oos.close();
以上就是对象的序列化
下面来说对象的解序列化
当我们需要用到被序列化的对象时,我们就要将该对象解序列化,好像是废话。
对象的解序列化也是四步:
⑴连接对象序列化文件
FileInputStrieam fip=new FileInputStrieam(“test.ser”);
注意如果不在当前目录下要加上文件的路径,如果虚拟机找不到这个文件就会抛出异常。
⑵创建ObjectInputStream对象来读取序列化文件
ObjectInputStream ois=new ObjectInputStream (fip);
⑶通过readObject方法返回一个Object类型的对象。还需要将Object对象的类型转换回原来的类型。
Object new=ois.readObject();
注意在序列化文件中可能会存有不止一个的对象的序列化文本,他会按照文本的顺序来读取文本数据。
每次调用readObject方法都会读出下一个对象。
⑷最后关闭ObjectInputStream
ois.close();
package com.xuliehuaTest; //需要先引用Java中的io包,才能实现Serializable接口。 import java.io.*; import java.util.ArrayList; import javax.print.attribute.standard.Sides; //先建立一个可供序列化的类DogTest。 //然后在main方法中队类DogTest的对象进行序列化。 public class DogTest implements Serializable{ private int size; private String name; public void setSize(int size){ this.size=size; } public void setName(String na){ name=na; } public int getSize(){ return size; } public String getName(){ return name; } public static void main(String[]args){ DogTest dt=new DogTest(); DogTest dt1=new DogTest(); DogTest dt2=new DogTest(); ArrayList<DogTest> arraylist=new ArrayList<DogTest>(); arraylist.add(dt); arraylist.add(dt1); arraylist.add(dt2); dt.setSize(12); dt.setName("xiao bao"); dt1.setSize(25); dt1.setName("tu qiang"); dt2.setSize(31); dt2.setName("da gei gou"); try{ int x=0; FileOutputStream f=new FileOutputStream("C:\\daxue.ser"); ObjectOutputStream oo=new ObjectOutputStream(f); while(x<3){ //将对象被序列化前的状态打印 System.out.println(x); System.out.println("Size="+arraylist.get(x).getSize()+" "); System.out.println("name="+arraylist.get(x).getName()); System.out.println(arraylist.get(x)); oo.writeObject(arraylist.get(x)); x=x+1; } oo.close(); }catch(Exception ex){ ex.printStackTrace(); } } }

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

WebStorm Mac 버전
유용한 JavaScript 개발 도구

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

Dreamweaver Mac版
시각적 웹 개발 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기
