(每日持续更新)jdk api之ObjectInputStream.GetField基础、应用、实战

博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿,每天都会整理到12点,为了就是能让大家能够真正了解该技术栈的真正原理,最终从程序员成为一名真正的架构师,写的不一定是全站做好的,但是是全站最用心的~。

以后我会推出一些列的文章,每天都会更新,每天进步一点点,发布顺序【java的api基础、应用、实战】->【java开源技术栈及源码分析】->【java开源技术栈整合】->【java低代码开发平台的建设】

关注【架构师成长之道】 输入“架构师视频课程”,即可免费获得全套架构师全套课程

一、java.io

1.45 ObjectInputStream.GetField

ObjectInputStream.GetField 是用于读取序列化对象的字段值的抽象类。它提供了一种访问对象字段的方式,可以用于从序列化流中读取对象的状态。以下是关于 ObjectInputStream.GetField 的介绍:

ObjectInputStream.GetField 介绍:
所有字段:

ObjectInputStream.GetField 没有公共字段。

构造方法:

ObjectInputStream.GetField 是一个抽象类,因此不能实例化。

方法摘要:
  • boolean defaulted(String name, boolean defaultValue):返回指定字段是否是默认值。

  • byte get(String name, byte defaultValue):返回指定字段的 byte 类型值。

  • char get(String name, char defaultValue):返回指定字段的 char 类型值。

  • double get(String name, double defaultValue):返回指定字段的 double 类型值。

  • float get(String name, float defaultValue):返回指定字段的 float 类型值。

  • int get(String name, int defaultValue):返回指定字段的 int 类型值。

  • long get(String name, long defaultValue):返回指定字段的 long 类型值。

  • Object get(String name, Object defaultValue):返回指定字段的对象值。

  • short get(String name, short defaultValue):返回指定字段的 short 类型值。

  • boolean get(String name, boolean defaultValue):返回指定字段的 boolean 类型值。

简单使用例子:
javaCopy code
import java.io.*;
​
public class ObjectInputStreamGetFieldExample {static class Person implements Serializable {private static final long serialVersionUID = 1L;private String name;private int age;
​public Person(String name, int age) {this.name = name;this.age = age;}
​@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}}
​public static void main(String[] args) {String fileName = "person.ser";writeObjectToFile(fileName);readObjectFromFile(fileName);}
​private static void writeObjectToFile(String fileName) {try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(fileName))) {Person person = new Person("Alice", 30);outputStream.writeObject(person);System.out.println("Object written to file successfully.");} catch (IOException e) {e.printStackTrace();}}
​private static void readObjectFromFile(String fileName) {try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(fileName))) {Object obj = inputStream.readObject();if (obj instanceof Person) {Person person = (Person) obj;System.out.println("Object read from file: " + person);ObjectInputStream.GetField fields = inputStream.readFields();int age = fields.get("age", 0);String name = (String) fields.get("name", null);System.out.println("Age: " + age);System.out.println("Name: " + name);}} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}
}

在这个例子中,我们定义了一个 Person 类,并将其序列化写入文件。然后使用 ObjectInputStream 从文件中读取对象,并通过 readFields() 方法获取对象的字段值,然后打印出来。

应用场景

ObjectInputStream.GetField 主要用于从序列化流中读取对象的字段值。以下是一些使用 ObjectInputStream.GetField 的应用场景及相应的代码实现:

应用场景 1: 从文件中读取序列化对象并获取字段值
javaCopy code
import java.io.*;
​
public class ReadSerializedObjectFromFile {static class Person implements Serializable {private static final long serialVersionUID = 1L;private String name;private int age;
​public Person(String name, int age) {this.name = name;this.age = age;}
​@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}}
​public static void main(String[] args) {String fileName = "person.ser";readObjectFromFile(fileName);}
​private static void readObjectFromFile(String fileName) {try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(fileName))) {Object obj = inputStream.readObject();if (obj instanceof Person) {Person person = (Person) obj;System.out.println("Object read from file: " + person);// 从序列化流中获取字段值ObjectInputStream.GetField fields = inputStream.readFields();int age = fields.get("age", 0);String name = (String) fields.get("name", null);System.out.println("Age: " + age);System.out.println("Name: " + name);}} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}
}
应用场景 2: 从网络流中读取序列化对象并获取字段值
javaCopy code
import java.io.*;
import java.net.*;
​
public class ReadSerializedObjectFromNetwork {static class Person implements Serializable {private static final long serialVersionUID = 1L;private String name;private int age;
​public Person(String name, int age) {this.name = name;this.age = age;}
​@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}}
​public static void main(String[] args) {try {Socket socket = new Socket("localhost", 8080);ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream());Object obj = inputStream.readObject();if (obj instanceof Person) {Person person = (Person) obj;System.out.println("Object read from network: " + person);// 从序列化流中获取字段值ObjectInputStream.GetField fields = inputStream.readFields();int age = fields.get("age", 0);String name = (String) fields.get("name", null);System.out.println("Age: " + age);System.out.println("Name: " + name);}inputStream.close();socket.close();} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}
}

这些例子展示了如何从文件和网络流中读取序列化对象,并使用 ObjectInputStream.GetField 获取字段值。

实战例子

以下是一个实战项目示例,演示了如何使用 ObjectInputStream.GetField 从文件中读取序列化对象并获取字段值:

javaCopy code
import java.io.*;
​
public class ObjectInputStreamExample {
​static class Person implements Serializable {private static final long serialVersionUID = 1L;private String name;private int age;
​public Person(String name, int age) {this.name = name;this.age = age;}
​@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}}
​public static void main(String[] args) {String fileName = "person.ser";
​// 写入对象到文件writeObjectToFile(fileName);
​// 从文件读取对象并处理readObjectFromFile(fileName);}
​private static void writeObjectToFile(String fileName) {try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(fileName))) {Person person = new Person("Alice", 30);outputStream.writeObject(person);System.out.println("Object written to file successfully.");} catch (IOException e) {e.printStackTrace();}}
​private static void readObjectFromFile(String fileName) {try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(fileName))) {Object obj = inputStream.readObject();if (obj instanceof Person) {Person person = (Person) obj;System.out.println("Object read from file: " + person);ObjectInputStream.GetField fields = inputStream.readFields();int age = fields.get("age", 0);String name = (String) fields.get("name", null);System.out.println("Age: " + age);System.out.println("Name: " + name);}} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}
}

在这个示例中,我们首先定义了一个 Person 类,该类实现了 Serializable 接口。然后我们将一个 Person 对象序列化并写入到文件中。接着使用 ObjectInputStream 从文件中读取对象,并通过 ObjectInputStream.GetField 获取对象的字段值,并打印出来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/474437.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云计算基础-华为存储实验

存储配置流程 创建硬盘域(CK,包括热备CK)创建存储池(CKG、Extent)创建LUN、LUN组、将LUN加入LUN组创建主机、主机组、将主机加入主机组创建映射视图(LUN组和主机组的映射) 1. 创建CK 创建硬盘…

yolov8源码解读Detect层

yolov8源码解读Detect层 Detect层解读网络各层解读及detect层后的处理 关于网络的backbone,head,以及detect层后处理,可以参考文章结尾博主的文章。 Detect层解读 先贴一下全部代码,下面一一解读。 class Detect(nn.Module):"""YOLOv8 …

“挖矿”系列:细说Python、conda 和 pip 之间的关系

继续挖矿,挖“金矿”! 1. Python、conda 和 pip(挖“金矿”工具) Python、conda 和 pip 是在现代数据科学和软件开发中常用的工具,它们各自有不同的作用,但相互之间存在密切的关系: Python&…

数据库MySQL中出现乱码和表格不对齐怎么解决

MySQL中出现乱码问题及解决办法: 情况类似: 首先进入到数据库中,命令:mysql -h localhost -uroot -p或者mysql -uroot -p;进入数据库后选择一个你的数据库查看表中的中文是否乱码 以上是数据库中表格出现乱码情况,原…

Stable Diffusion webui安装详细教程

上一篇文章介绍了sd主流的ui,相信大家已经有所了解,下面为大家介绍sd-webui的安装详细教程 文章目录 一、 安装包说明二、对电脑的要求三、安装文件介绍四、安装步骤五、电脑问题与云主机六、界面简要说明及通用反向提示词 一、 安装包说明 通常我们使…

第12章 反射

12.1 反射概述 Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以得到任意一个对象所属的类的信息,可以调用任意一个类的成员变量和方法,可以获取任意一个对象的属性和方法…

绝地求生:荣都加入竞技模式,地图轮换系统不会取消

从28.1开始,荣都将成为(亚服)竞技地图的一份子(有消息称日韩服将移除荣都) 所以各地区地图轮换将会根据各地区的偏好轮换。 在接下来竞技地图换轮中,四个地图出现的概率为: 艾伦格Erangel(25%)/米拉玛Miram…

基于MapVGL的地理信息三维度数据增长可视化

写在前面 工作中接触,简单整理博文内容为 基于MapVGL的地理信息维度数据增长可视化 Demo理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都…

Netty Review - 客户端流程源码解析

文章目录 PreNetty Client CodeNetty 客户端创建流程源码分析入口客户端建立连接NioMessageUnsafe#read 处理 OP_ACCEPT 客户端发送数据NioByteUnsafe#read 处理 OP_READ 源码图 Pre Netty Review - ServerBootstrap源码解析 Netty Review - NioServerSocketChannel源码分析 …

由于找不到MSVCP140.dll无法运行软件游戏,多种解决方法分享

电脑系统在运行过程中,当出现“由于找不到MSVCP140.dll”这一提示时,可能会引发一系列潜在的问题与影响。当电脑无法找到这个特定的dll文件时,意味着相关应用可能无法顺利加载并执行必要的组件,进而导致程序无法启动或运行过程中频…

Python中超超超高颜值的库,我刚发现的...

在Python中,有一个名为rich的宝藏包,它能够将你的终端输出变成一场视觉盛宴。rich是一个用于在终端中呈现富文本(包括颜色、样式、表格、进度条等)的Python库,它可以使你的命令行界面变得生动而富有表现力。 如何安装 …

上位机图像处理和嵌入式模块部署(Halcon借鉴与客户学习)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 对于很多学院派的同学来说,他们对市场的感觉一般是比较弱的。如果写一个软件的话,或者说开发一个项目的话,他们…