2026/4/16 4:52:43
网站建设
项目流程
给别人做网站,盐城北京网站建设,安装wordpress 500 内部服务器错误,软件项目管理的主要内容有哪些?一、理解Java序列化和反序列化
**Serialization(序列化)#xff1a;**将java对象以一连串的字节保存在磁盘文件中的过程#xff0c;也可以说是保存java对象状态的过程。序列化可以将数据永久保存在磁盘上(通常保存在文件中)。
deserialization(反序列化)**#xff1a;**将…一、理解Java序列化和反序列化**Serialization(序列化)**将java对象以一连串的字节保存在磁盘文件中的过程也可以说是保存java对象状态的过程。序列化可以将数据永久保存在磁盘上(通常保存在文件中)。deserialization(反序列化)****将保存在磁盘文件中的java字节码重新转换成java对象称为反序列化。二、序列化和反序列化的应用两个进程在远程通信时可以发送多种数据包括文本、图片、音频、视频等这些数据都是以二进制序列的形式在网络上传输。java是面向对象的开发方式一切都是java对象想要在网络中传输java对象可以使用序列化和反序列化去实现发送发需要将java对象转换为字节序列然后在网络上传送接收方收到字符序列后会通过反序列化将字节序列恢复成java对象。java序列化的优点实现了数据的持久化通过序列化可以把数据持久地保存在硬盘上(磁盘文件)。利用序列化实现远程通信在网络上传输字节序列。三、序列化和反序列化地实现1.JDK类库提供的序列化API:java.io.ObjectOutputStream表示对象输出流其中writeObject(Object obj)方法可以将给定参数的obj对象进行序列化将转换的一连串的字节序列写到指定的目标输出流中。java.io.ObjectInputStream该类表示对象输入流该类下的readObject(Object obj)方法会从源输入流中读取字节序列并将它反序列化为一个java对象并返回。序列化要求实现序列化的类对象必须实现了Serializable类或Externalizable类才能被序列化否则会抛出异常。实现java序列化和反序列化的三种方法现在要对student类进行序列化和反序列化遵循以下方法方法一若student类实现了serializable接口则可以通过objectOutputstream和objectinputstream默认的序列化和反序列化方式对非transient的实例变量进行序列化和反序列化。方法二若student类实现了serializable接口并且定义了writeObject(objectOutputStream out)和readObject(objectinputStream in)方法则可以直接调用student类的两种方法进行序列化和反序列化。方法三若student类实现了Externalizable接口则必须实现readExternal(Objectinput in)和writeExternal(Objectoutput out)方法进行序列化和反序列化。JDK类库中的序列化步骤第一步创建一个输出流对象它可以包装一个输出流对象如文件输出流。ObjectOutputStream out new ObjectOutputStream(new fileOutputStream(“E:\\JavaXuLiehua\\Student\\Student1.txt”));第二步通过输出流对象的writeObject()方法写对象out.writeObject(“hollo word”);out.writeObject(“happy”)JDK中反序列化操作第一步创建文件输入流对象ObjectInputStream in new ObjectInputStream(new fileInputStream(“E:\\JavaXuLiehua\\Student\\Student1.txt”));第二步调用readObject()方法String obj1 (String)in.readObject();String obj2 (String)in.readObject();为了保证正确读取数据对象输出流写入对象的顺序与对象输入流读取对象的顺序一致。Student类序列化和反序列化演示1.先创建一个继承了serializable类的student类import java.io.Serializable; //导入io包下的序列化类 //创建实现序列化接口的学生类 public class Student implements Serializable { //私有化成员变量 private String name; private char sex; private int year; private double gpa; public Student(){ //无参构造 } public Student(String name,char sex,int year,double gpa){ //参数给属性赋值 this.name name; this.sex sex; this.year year; this.gpa gpa; } //重写set和get public String getName() { return name; } public void setName(String name) { this.name name; } public char getSex() { return sex; } public void setSex(char sex) { this.sex sex; } public int getYear() { return year; } public void setYear(int year) { this.year year; } public double getGpa() { return gpa; } public void setGpa(double gpa) { this.gpa gpa; } }把Student类的对象序列化到txt文件E:\\JavaXuLiehua\\Student\\Student1.txt中并对文件进行反序列化import java.io.*; import java.io.Externalizable; /* 把student类对象序列化到文件E:\\JavaXuLiehua\\Student\\Student1.txt */ public class UserStudent { public static void main(String[] args) throws IOException { Student st new Student(Tom,M,20,3.6); //实例化student类 //判断Student1.txt是否创建成功 File file new File(E:\\JavaXuLiehua\\Student\\Student1.txt); if(file.exists()) { System.out.println(文件存在); }else{ //否则创建新文件 file.createNewFile(); } try { //Student对象序列化过程 FileOutputStream fos new FileOutputStream(file); ObjectOutputStream oos new ObjectOutputStream(fos); //调用 ObjectOutputStream 中的 writeObject() 方法 写对象 oos.writeObject(st); oos.flush(); //flush方法刷新缓冲区写字符时会用因为字符会先进入缓冲区将内存中的数据立刻写出 fos.close(); oos.close(); //Student对象反序列化过程 FileInputStream fis new FileInputStream(file); //创建对象输入流 ObjectInputStream ois new ObjectInputStream(fis); //读取对象 Student st1 (Student) ois.readObject(); //会抛出异常类找不到异常 System.out.println(name st1.getName()); System.out.println(sex st1.getSex()); System.out.println(year st1.getYear()); System.out.println(gpa st1.getGpa()); ois.close(); fis.close(); }catch (ClassNotFoundException e){ e.printStackTrace(); } } }查看txt文件结果如下 sr JavaxulieHua.Studentd9Q藿Hf D gpaC sexI yearL namet Ljava/lang/String;xp 烫烫掏 M t Tom可以看出其中的内容是不容易阅读的只能通过反序列化读取。四、transient关键字transient关键字表示有理的被修饰的数据不能进行序列化这里不做详细介绍修改情况如下private transient char sex; //被transient关键字修饰不参与序列化运行结果如下文件存在 name Tom sex year 20 gpa 3.6此时可以看见被transient关键字修饰的变量sex并没有被序列化返回了空值。五、Externalizable接口实现序列化与反序列化Externalizable接口继承Serializable接口实现Externalizable接口需要实现readExternal()方法和writeExternal()方法这两个方法是抽象方法对应的是serializable接口的readObject()方法和writeObject()方法可以理解为把serializable的两个方法抽象出来。Externalizable没有serializable的限制static和transient关键字修饰的属性也能进行序列化。具体代码实现如下复制对象student命名为student1在里面重写writeExternal()方法和readExternal()方法如下Override //对抽象方法进行重写 public void writeExternal(ObjectOutput out) throws IOException{ out.writeObject(name); out.writeObject(sex); out.writeObject(year); out.writeObject(gpa); } Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { name (String) in.readObject(); sex (char) in.readObject(); year (int) in.readObject(); gpa (double) in.readObject(); }相应的测试方法里面调用这两种方法的时候直接调用writeObject()方法和readObject()方法即可重写的writeExternal()和readExternal()方法会自动执行。FileOutputStream fos1 new FileOutputStream(file1); ObjectOutputStream oos1 new ObjectOutputStream(fos1); //调用 ObjectOutputStream 中的 writeObject() 方法 写对象 oos1.writeObject(st); //会自动执行重写的writeExternal()方法FileInputStream fis1 new FileInputStream(file1); //创建对象输入流 ObjectInputStream ois1 new ObjectInputStream(fis1); //读取对象 //会自动执行readExternal()方法 Student1 st1 (Student1) ois1.readObject(); //会抛出异常类找不到异常虽然student1类里的sex属性被static或transient修饰但依旧被序列化结果如下文件存在 name Tom sex M year 20 gpa 3.6Java开发的就业市场正在经历结构性调整竞争日益激烈传统纯业务开发岗位如仅完成增删改查业务的后端工程师的需求特别是入门级岗位正显著萎缩。随着企业技术需求升级市场对Java人才的要求已从通用技能转向了更深入的领域经验如云原生、微服务或前沿的AI集成能力。这也导致岗位竞争加剧在一、二线城市求职者不仅面临技术内卷还需应对学历与项目经验的高门槛。大模型为核心的AI领域正展现出前所未有的就业热度与人才红利2025年AI相关新发岗位数量同比激增543%单月增幅最高超过11倍大模型算法工程师位居热门岗位前列。行业顶尖人才的供需严重失衡议价能力极强跳槽薪资涨幅可达30%-50%。值得注意的是市场并非单纯青睐算法研究员而是急需能将大模型能力落地于复杂业务系统的工程人才。这使得具备企业级架构思维和复杂系统整合经验的Java工程师在向“Java大模型”复合人才转型时拥有独特优势成为企业竞相争夺的对象其薪资天花板也远高于传统Java岗位。说真的这两年看着身边一个个搞Java、C、前端、数据、架构的开始卷大模型挺唏嘘的。大家最开始都是写接口、搞Spring Boot、连数据库、配Redis稳稳当当过日子。结果GPT、DeepSeek火了之后整条线上的人都开始有点慌了大家都在想“我是不是要学大模型不然这饭碗还能保多久”先给出最直接的答案一定要把现有的技术和大模型结合起来而不是抛弃你们现有技术掌握AI能力的Java工程师比纯Java岗要吃香的多。即使现在裁员、降薪、团队解散的比比皆是……但后续的趋势一定是AI应用落地大模型方向才是实现职业升级、提升薪资待遇的绝佳机遇如何学习AGI大模型作为一名热心肠的互联网老兵我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。因篇幅有限仅展示部分资料需要点击下方链接即可前往获取2025最新版CSDN大礼包《AGI大模型学习资源包》免费分享**一、2025最新大模型学习路线一个明确的学习路线可以帮助新人了解从哪里开始按照什么顺序学习以及需要掌握哪些知识点。大模型领域涉及的知识点非常广泛没有明确的学习路线可能会导致新人感到迷茫不知道应该专注于哪些内容。我们把学习路线分成L1到L4四个阶段一步步带你从入门到进阶从理论到实战。L1级别:AI大模型时代的华丽登场L1阶段我们会去了解大模型的基础知识以及大模型在各个行业的应用和分析学习理解大模型的核心原理关键技术以及大模型应用场景通过理论原理结合多个项目实战从提示工程基础到提示工程进阶掌握Prompt提示工程。L2级别AI大模型RAG应用开发工程L2阶段是我们的AI大模型RAG应用开发工程我们会去学习RAG检索增强生成包括Naive RAG、Advanced-RAG以及RAG性能评估还有GraphRAG在内的多个RAG热门项目的分析。L3级别大模型Agent应用架构进阶实践L3阶段大模型Agent应用架构进阶实现我们会去学习LangChain、 LIamaIndex框架也会学习到AutoGPT、 MetaGPT等多Agent系统打造我们自己的Agent智能体同时还可以学习到包括Coze、Dify在内的可视化工具的使用。L4级别大模型微调与私有化部署L4阶段大模型的微调和私有化部署我们会更加深入的探讨Transformer架构学习大模型的微调技术利用DeepSpeed、Lamam Factory等工具快速进行模型微调并通过Ollama、vLLM等推理部署框架实现模型的快速部署。整个大模型学习路线L1主要是对大模型的理论基础、生态以及提示词他的一个学习掌握而L3 L4更多的是通过项目实战来掌握大模型的应用开发针对以上大模型的学习路线我们也整理了对应的学习视频教程和配套的学习资料。二、大模型经典PDF书籍书籍和学习文档资料是学习大模型过程中必不可少的我们精选了一系列深入探讨大模型技术的书籍和学习文档它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。书籍含电子版PDF三、大模型视频教程对于很多自学或者没有基础的同学来说书籍这些纯文字类的学习教材会觉得比较晦涩难以理解因此我们提供了丰富的大模型视频教程以动态、形象的方式展示技术概念帮助你更快、更轻松地掌握核心知识。四、大模型项目实战学以致用当你的理论知识积累到一定程度就需要通过项目实战在实际操作中检验和巩固你所学到的知识同时为你找工作和职业发展打下坚实的基础。五、大模型面试题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我们将提供精心整理的大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。因篇幅有限仅展示部分资料需要点击下方链接即可前往获取2025最新版CSDN大礼包《AGI大模型学习资源包》免费分享