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

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

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

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

一、java.io

1.47 ObjectOutput

ObjectOutput 接口用于向流中写入对象数据。它是序列化对象的起点,允许将对象写入到输出流中。

ObjectOutput 接口介绍:
所有字段:
  • 没有字段,因为它是一个接口。

构造方法:
  • 没有构造方法,因为它是一个接口。

方法摘要:
  • void writeObject(Object obj) throws IOException:将指定的对象写入流中。

简单使用例子:

以下是一个简单的例子,演示了如何使用 ObjectOutput 接口将对象写入输出流中:

javaCopy code
import java.io.*;
​
public class ObjectOutputExample {
​public static void main(String[] args) {String fileName = "object.dat";
​try (OutputStream fileOutputStream = new FileOutputStream(fileName);ObjectOutput objectOutput = new ObjectOutputStream(fileOutputStream)) {
​// 写入对象到输出流中MyObject obj = new MyObject("Hello, world!");objectOutput.writeObject(obj);
​System.out.println("Object has been written to file successfully.");} catch (IOException e) {e.printStackTrace();}}
}
​
class MyObject implements Serializable {private static final long serialVersionUID = 1L;private String data;
​public MyObject(String data) {this.data = data;}
​@Overridepublic String toString() {return "MyObject{" +"data='" + data + '\'' +'}';}
}

在上面的例子中,我们首先创建了一个 MyObject 类,该类实现了 Serializable 接口。然后,我们使用 ObjectOutputStreamMyObject 对象写入到名为 "object.dat" 的文件中。通过调用 writeObject() 方法,我们将对象写入到输出流中。

应用场景

下面列出了使用 ObjectOutput 接口的一些常见应用场景以及相应的代码实现:

应用场景 1: 将对象写入文件
javaCopy code
import java.io.*;
​
public class WriteObjectToFile {public static void main(String[] args) {String fileName = "data.ser";
​try (OutputStream fileOutputStream = new FileOutputStream(fileName);ObjectOutput objectOutput = new ObjectOutputStream(fileOutputStream)) {
​// 创建并写入对象到文件MyObject obj = new MyObject("Hello, world!");objectOutput.writeObject(obj);
​System.out.println("Object has been written to file successfully.");} catch (IOException e) {e.printStackTrace();}}
}
​
class MyObject implements Serializable {private static final long serialVersionUID = 1L;private String data;
​public MyObject(String data) {this.data = data;}
​@Overridepublic String toString() {return "MyObject{" +"data='" + data + '\'' +'}';}
}
应用场景 2: 将对象写入网络流
javaCopy code
import java.io.*;
import java.net.*;
​
public class WriteObjectToNetwork {public static void main(String[] args) {try (Socket socket = new Socket("localhost", 12345);OutputStream outputStream = socket.getOutputStream();ObjectOutput objectOutput = new ObjectOutputStream(outputStream)) {
​// 创建并写入对象到网络流MyObject obj = new MyObject("Hello, world!");objectOutput.writeObject(obj);
​System.out.println("Object has been written to network stream successfully.");} catch (IOException e) {e.printStackTrace();}}
}
应用场景 3: 将对象写入数据库 Blob 字段
javaCopy code
import java.io.*;
import java.sql.*;
​
public class WriteObjectToDatabase {public static void main(String[] args) {try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password");PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO MyTable (object_data) VALUES (?)")) {
​// 创建对象并将其写入到字节数组输出流MyObject obj = new MyObject("Hello, world!");ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();try (ObjectOutput objectOutput = new ObjectOutputStream(byteArrayOutputStream)) {objectOutput.writeObject(obj);}
​// 将对象数据写入到数据库 Blob 字段preparedStatement.setBytes(1, byteArrayOutputStream.toByteArray());preparedStatement.executeUpdate();
​System.out.println("Object has been written to database successfully.");} catch (SQLException | IOException e) {e.printStackTrace();}}
}

这些是使用 ObjectOutput 接口的一些常见应用场景,包括将对象写入文件、网络流和数据库 Blob 字段中。

实战例子

以下是一个项目实战例子,演示了如何使用 ObjectOutput 接口将对象写入文件并从文件中读取:

javaCopy code
import java.io.*;
​
public class ObjectSerializationExample {
​static class User implements Serializable {private static final long serialVersionUID = 1L;
​private String username;private transient String password; // 密码字段不参与序列化
​public User(String username, String password) {this.username = username;this.password = password;}
​@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +'}';}}
​public static void main(String[] args) {String fileName = "user.ser";
​// 写入对象到文件writeObjectToFile(fileName);
​// 从文件读取对象并处理readObjectFromFile(fileName);}
​private static void writeObjectToFile(String fileName) {try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(fileName))) {User user = new User("john.doe", "password123");outputStream.writeObject(user);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 User) {User user = (User) obj;System.out.println("Object read from file: " + user);}} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}
}

在这个例子中,我们定义了一个 User 类,该类实现了 Serializable 接口。我们创建了一个 User 对象并将其写入到文件中,然后再从文件中读取该对象。通过使用 ObjectOutputStreamObjectInputStream 类,我们可以很容易地将对象写入文件并从文件中读取对象。

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

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

相关文章

2024.2.21

1、用多线程进行文件拷贝 #include<myhead.h>//参数结构体创建 typedef struct INFO {const char *srcfile;const char *destfile;int length; }Info;//定义获取文件长度的函数 int get_file_len(const char *srcfile,const char *destfile){int srcfd,destfd;//只读形式…

基于vue的个性化推荐餐饮系统Springboot

项目&#xff1a;基于vue的个性化推荐餐饮系统Springboot 摘要 现代信息化社会下的数据管理对活动的重要性越来越为明显&#xff0c;人们出门可以通过网络进行交流、信息咨询、查询等操作。网络化生活对人们通过网上购物也有了非常大的考验&#xff0c;通过网上进行点餐的人也…

ctfshow web入门 web141-145

1.web141 ^\w$表示在开头和末尾匹配字母数字_&#xff0c;传入的v3值不能有字母数字_&#xff0c;即无字母的命令执行 php中1-phpinfo()是可以执行的&#xff0c;加减乘除都可以实现 这里或&#xff0c;异或&#xff0c;取反等运算都可以 这里采用羽师傅的异或脚本生成paylo…

用十篇论文聊聊关于使用LLM做query Rewrite的问题

一、什么是query改写&#xff1f; query改写其实理解起来很简单&#xff0c;就是把原始的query经历一系列的操作&#xff0c;然后变成另外一个query&#xff0c;从而达到提升召回率和准确率的效果。 query改写的过程中&#xff0c;这一系列的操作&#xff0c;其实是围绕两个方面…

网络原理 - HTTP/HTTPS(4)

HTTP响应详解 认识"状态码"(status code) 状态码表示访问一个页面的结果.(是访问成功,还是失败,还是其它的一些情况...).(响应结果如何) 学习状态码 -> 为了调试问题. 写服务器时,按照状态码的含义正确使用. 200 OK 这是最常见的状态码,表示访问成功. 抓包抓…

面试经典150题——单词规律

"Dont wait. The time will never be just right." - Napoleon Hill 1. 题目描述 2. 题目分析与解析 首先还是得把题目先读懂&#xff0c;我们直接来看看示例&#xff1a; 根据上面的示例&#xff0c;我们可以看出pattern其实就是表示单词出现的规律&#xff0c;每…

Linux中alarm/setitimer函数(信号函数)

alarm函数 函数原型&#xff1a; unsigned int alarm(unsigned int seconds); 函数描述&#xff1a;设置定时器&#xff08;闹钟&#xff09;。在指定seconds后&#xff0c;内核会给当前进程发送 14&#xff09;SIGALRM信号。进程收到该信号&#xff0c;默认动作终止。每个进程…

git工具

一、命令行工具 二、Git 客户端可视化工具-推荐 1.常用工具 tortoisegit 官网 https://tortoisegit.org/ 推荐 sourcetree 官网https://www.sourcetreeapp.com/ 2.tortoisegit安装 2.1 下载安装包 2.2 下载语言包 2.3 安装 2.4 安装语言包 5.使用 5.1 新建分支 5.2 切换分支…

python基础教程—总结篇

这篇是Python基础教程系列的总结篇&#xff0c;这里这个专栏的地址&#xff1a;《Python教程》 首先必须声明一点&#xff0c;这是基础教程&#xff0c;所以面向的是新人&#xff0c;没有学过Python的同学&#xff0c;所以这套教程并没有涉及到比较难的并发编程模块&#xff0…

数字世界的探索者:计算机相关专业电影精选推荐

目录 推荐计算机专业必看的几部电影 《黑客帝国》 《社交网络》 《乔布斯传》 《心灵捕手》 《源代码》 《盗梦空间》 《头号玩家》 《我是谁&#xff1a;没有绝对安全的系统》 《战争游戏》(WarGames) 《模仿游戏》(The Imitation Game) 《硅谷》(Silicon Valley) …

qt_day3

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//设置账户和密码的登录标签ui->lab1->setPixmap(QPixmap(":/pictrue/wodepeizhenshi.png"));…

51_蓝桥杯_独立按键

一 电路 注意&#xff1a;J5跳帽接到2~3引脚&#xff0c;使按键S4-S5四个按键的另外一端接地&#xff0c;从而成为4个独立按键。 二 独立按键工作原理 三 代码 代码1&#xff1a;按下S7点亮L1指示灯&#xff0c;松开按键&#xff0c;指示灯熄灭&#xff0c;按下S6点亮L2指示灯…

电流回路是分析电路图的基础,看看这个电路你会更明白

任何电器要想开始工作&#xff0c;都离不开供电&#xff0c;而要供电就离不开电源。电源有两个极即:电源正极()、电源负极(-)&#xff0c;电源要实现向负载供电&#xff0c;必须是电源正极()流出电流经负载再流回电源负极(-)&#xff0c;这时可以说这个电路构成了供电电流回路了…

阿里云幻兽帕鲁服务器续费还有优惠吗?老用户续费的价格很贵怎么办?

最近很多人在问&#xff0c;上个月买的阿里云幻兽帕鲁服务器续费是不是没有优惠了&#xff0c;因为他们发现续费的价格比之前贵了很多&#xff0c;之前是不到30元一个月。 其实目前的续费优惠是有的&#xff0c;有但不多&#xff0c;方法就是进入阿里云服务器ECS控制台&#x…

设计模式四:适配器模式

1、适配器模式的理解 适配器模式可以理解为有两个现成的类Adaptee和Target&#xff0c;它们两个是不能动的&#xff0c;要求必须使用B这个类来实现一个功能&#xff0c;但是A的内容是能复用的&#xff0c;这个时候我们需要编写一个转换器 适配器模式 Adaptee&#xff1a;被适…

【C++初阶】类和对象(上)

目录 一.类的引入 1.概念 2.类的定义 (1).语法规范 (2)命名规范 (3)类的访问限定符及封装 ①访问限定符 (4)类的两种定义 ①声明和定义全部放在类体中&#xff0c;需注意&#xff1a;成员函数如果在类中定义&#xff0c;编译器可能会将其当成内联函数处理。 ​编辑…

【IDEA使用安装】如何长期正常使用IDEA,告别弹窗?【2024年亲测】

IDEA最新使用指南 写在前面涉及知识1、官网下载最新版本IDEA2、安装IDEA版本3、正常使用IDEA软件4、作者寄语 写在前面 愉快的假期结束了&#xff0c;当然我们奋斗的步伐不能停止&#xff0c;随即迎来了2024年的全新挑战&#xff0c;学更多的知识&#xff0c;分享更多有用的硬…

langchain配置openai

langchain的新版很多操作都变了&#xff0c;国内使用openai也不大方便&#xff0c;好在发现了个宝藏网站&#xff0c;可以使用 网址&#xff0c;接口的调用与官网是完全一样的 langchain调用各种大模型非常方便&#xff0c;也不用担心接口经常变动&#xff0c;导致和gradio等程…

【Flink状态管理五】Checkpoint的设计与实现

文章目录 1. Checkpoint的整体设计2. Checkpoint创建源码解析2.1. DefaultExecutionGraphBuilder.buildGraph2.2. ExecutionGraph.enableCheckpointing 由于系统原因导致Flink作业无法正常运行的情况非常多&#xff0c;且很多时候都是无法避免的。对于Flink集群来讲&#xff0c…

opencv图像处理(一)

一. OpenCV 简介 OpenCV 是一个跨平台计算机视觉库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上。 应用领域 1、人机互动 2、物体识别 3、图像分割 4、人脸识别 5、动作识别 6、运动跟踪 7、机器人 8、运动分析 9、机器视觉 10、…