【面经总结】Java基础 - IO

news2024/10/6 1:38:43

序列化

什么是序列化和反序列化?

序列化:将对象转换为二进制数据

反序列化:将二进制数据转换为对象

  • 目的:方便网络传输、持久化保存

Java 是怎么实现序列化的?

Java 通过对象输入输出流来实现序列化和反序列化,对象序列化不会关注类中的静态变量。

Java 的序列化过程:

  1. 对象及其属性都要必须属于 EnumArraySerializable
  2. 类中需要存在 serialVersionUID 字段,用来标明版本。
  3. 使用 ObjectOutputStream 进行序列化。
/**
 * 序列化
 */
private static void serialize(String filename) throws IOException {
    File f = new File(filename);
    // 文件输出流
    OutputStream out = new FileOutputStream(f); 
    // 对象输出流
    ObjectOutputStream oos = new ObjectOutputStream(out); 
    // 保存对象
    oos.writeObject(new Person("Jack", 30, Sex.MALE)); 
    oos.close();
    out.close();
}

/**
 * 反序列化
 */
private static void deserialize(String filename) throws IOException, ClassNotFoundException {
    File f = new File(filename);
    // 文件输入流
    InputStream in = new FileInputStream(f); 
    // 对象输入流
    ObjectInputStream ois = new ObjectInputStream(in); 
     // 读取对象
    Object obj = ois.readObject();
    ois.close();
    in.close();
    System.out.println(obj);
}

img

可以使用 transient 关键字忽略掉某些字段

transient private Integer age = null;

常见的序列化协议有哪些?

  1. 二进制序列化
    1. Java 原生序列化:不能跨语言,性能较差,要求多
    2. Protobuf:Google 数据标准
    3. Thrift:Apache 开源项目
    4. Hessian
    5. Kryo
    6. FST
  2. Json 序列化
    1. Fastjson:阿里
    2. Jackson
    3. Gson:Google

网络 I/O

https://www.bilibili.com/video/BV1Lg4y1u7KW/

BIO/NIO/AIO 有什么区别?

  1. BIO(同步阻塞 IO):在读、写动作完成之前,线程会一直阻塞在那里,线性调用。
    1. BIO 会阻塞线程,一个连接一个线程。已经建立 Socket 连接后不能再与其他客户端连接。
    2. BIO 可以使用多线程和线程池优化

img

  1. NIO(同步非阻塞 IO):使用后台线程执行IO,前台线程轮询查看状态。
    1. NIO 性能消耗大,需要频繁轮询。
    2. 可以通过 I/O 多路复用优化

img

  1. AIO(异步非阻塞 IO):基于事件和回调机制,后台处理完成后,会通知相应线程进行后续工作。

img

I/O 多路复用是什么?

操作系统提供了一系列系统调用(select、poll、epoll),可以同时监控多个 fd 文件描述符(批量轮询)。

select 和 epoll 有什么区别?

select 的问题:

  1. 最大连接数有限
  2. 返回后通过遍历所有的 fd,找出就绪的 fd 进行下一步操作

epoll 的优势:

  1. 最大连接数无限
  2. 通过事件回调返回就绪的 fd

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

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

相关文章

关于docker无法正常下载镜像的问题

文章目录 之前还可以正常下载镜像,但是一段时间之后就无法下载了,猜测可能是政治原因,无法连接到国外服务器,所以我设置了阿里云的镜像加速器。 配置方法如下: 前往阿里云(https://help.aliyun.com/zh/acr/…

Windows同一文件夹下支持大小写同名文件

举例:同一文件目录下需要存在A.java, a.java, Windows是不支持的,这时候需要建一个Linux子系统的文件夹 创建教程 1、在启用或关闭Windows功能下面找到 适用于Linux系统的Windows子系统 2、cmd 执行命令 fsutil file SetCaseSensitiveInfo 文件夹路径 …

网格简化技术在AI绘画中的革新应用

随着人工智能技术的飞速发展,AI绘画作为其创新应用领域之一,正逐渐进入公众的视野。AI绘画不仅为艺术家和设计师提供了强大的辅助工具,也为非专业人士开启了艺术创作的大门。然而,高质量的AI绘画往往需要复杂的计算过程&#xff0…

C# WPF入门学习主线篇(二十七)—— 数据源

C# WPF入门学习主线篇(二十七)—— 数据源 在WPF开发中,数据绑定是一个强大的功能,它允许UI元素和数据源之间进行双向通信。理解和使用数据源对于创建高效和动态的应用程序至关重要。在本文中,我们将详细介绍WPF中的数…

servlet梦想酒店管理系统

梦想酒店管理系统 酒店管理系统分为管理端,和用户端, 用户端可以查看酒店客房,预定酒店系统,查询预定信息。 管理端:用户管理,类型,房间管理,业务管理,统计分析。 技术&…

使用Python保护或加密Excel文件的7种方法

目录 安装Python Excel库 Python 使用文档打开密码保护 Excel 文件 Python 使用文档修改密码保护 Excel 文件 Python 将 Excel 文件标记为最终版本 Python 保护 Excel 工作表 Python 在保护 Excel 工作表的同时允许编辑某些单元格 Python 锁定 Excel 工作表中的特定单元…

Elasticsearch:智能 RAG,获取周围分块

作者:来自 Elastic Sunile Manjee 在检索增强生成 (RAG) 领域,一个持续存在的挑战是找到输入大型语言模型 (LLM) 的最佳数据量。数据太少会导致响应不足或不准确,而数据太多会导致答案模糊。这种微妙的平衡启发我开发了一个专注于智能分块和利…

ssm的疫情物资管理系统

ssm的疫情物资管理系统 功能:前端页面展示 用户端:主页展示,新闻展示,疫情物资,在线留言,全国疫情,健康打卡,注册,登录 后端管理:登录,账号管理…

2024怎么选择开放式耳机?五款高评分机型推荐!

还记得我最早接触到不入耳的耳机是在前几年,上课需要一副耳机,我又受不住长时间的戴耳机,那时候如利刃一款蛮贵的开放式耳机,时过境迁现在已随着人们的需求发展至到至今的真无线的开放式蓝牙耳机,我也在这几年之内入手…

Postman下发流表至Opendaylight

目录 任务目的 任务内容 实验原理 实验环境 实验过程 1、打开ODL控制器 2、网页端打开ODL控制页面 3、创建拓扑 4、Postman中查看交换机的信息 5、L2层流表下发 6、L3层流表下发 7、L4层流表下发 任务目的 1、掌握OpenFlow流表相关知识,理解SDN网络中L…

【AI绘画】Stable Diffusion 3开源

Open Release of Stable Diffusion 3 Medium 主要内容 Stable Diffusion 3是Stability AI目前为止最先进的文本转图像开放源代码算法。 这款模型的小巧设计使其完美适合用于消费级PC和笔记本电脑,以及企业级图形处理单元上运行。它已经满足了标准化的文字转图像模…

红黑树(C++)

文章目录 写在前面1. 红黑树的概念及性质1. 1 红黑树的概念1. 2 红黑树的性质 2. 红黑树节点的定义3. 红黑树的插入3.1 按照二叉搜索的树规则插入新节点3.2 检测新节点插入后,红黑树的性质是否造到破坏 4.红黑树的删除5.红黑树的验证6.源码 写在前面 在上篇文章中&…

移动UI:登录页如此哇塞,不发出就有点锦衣夜行啦。

移动UI登录页是移动应用中非常重要的一环。一个出色的登录页可以给用户留下深刻的印象,提供良好的用户体验,并确保用户的账号安全 在设计登录页时,可以考虑以下几个方面: 简洁明了的界面:登录页应该简洁明了&#xf…

关于一元方程求根中牛顿迭代法的分析

文末含有程序源代码以及可执行exe文件,文中部分内容参考网上博客以及GPT协助,希望能对你有所帮助~ 一、理论知识简述 牛顿迭代法(Newton’s Method),也称为牛顿-拉弗森方法(Newton-Raphson Method&#xf…

罗森伯格1800M 2000M 2400M 900M无源互调分析仪

在无线通信领域,频段是宝贵的资源,不同的通信系统通常会采用不同的频段以满足其传输需求。随着技术的发展,越来越多的通信系统被部署在各种频段上。为了准确、高效地测试和调试这些 信系统,各种测试设备也应运而生。源互调分析仪便…

rizhuti1.9-最新版-推荐文章缩略图

下载地址:rizhuti1.9-最新版-推荐文章缩略图 商城功能后台可以一键开启关闭,关闭后就是一个布局灵活,界面优美,速度超快的wordpress博客主题

2024新版AI创作系统pro搭建,支持文生漫画视频ai对话问答/ai音乐创作/ai测评/ai换脸/ai写真

一、系统介绍 一款结合了多种功能应用,是当前市场最热门的AI工具综合体 AI动漫生成 AI音乐创作 AI写真 AI换脸 AI绘画 AI趣测 六大AI功能 AI创作小程序是一种利用人工智能技术为用户提供服务,并通过某种方式实现的小程序。这种小程序可以应用于多…

微服务 | Springboot整合Dubbo+Nacos实现RPC调用

官网:Apache Dubbo 随着互联网技术的飞速发展,越来越多的企业和开发者开始关注微服务架构。微服务架构可以将一个大型的应用拆分成多个独立、可扩展、可维护的小型服务,每个服务负责实现应用的一部分功能。这种架构方式可以提高开发效率&…

RK3568技术笔记 Ubuntu 安装VMware Tools

安装 VMware Tools 后可以直接使用复制粘贴功能拷贝 Ubuntu 系统和 windows 主机内的文件,非常方便。 开启虚拟机,必须要进入ubuntu系统后才能进行下面的步骤。 单击 VMware 软件中的标签“虚拟机”,在下拉的菜单中单击“安装VMware Tools &…

x64-linux下在vscode使用vcpkg

1.使用vscode远程连接上对应的linux ,或者直接在图形化界面上使用。 2.安装vcpkg 插件,然后打开插件设置。 注意:defalut和host的主机一定和你自己的主机一致,且必须符合vcpkg三元组格式,其中你可以选择工作台的设置&a…