《Java 100 天进阶之路》第34篇:Java序列化与反序列化详解

Android Binder——数据传递载体(二十一) 同一进程间的对象传递都是通过引用来做的,因而本质上就是传递了一个内存地址。而跨进程采用了虚拟内存机制,两个进程都有自己独立的内存地址空间,所以跨进程传递的地址值是无效的。进程间的数据传递是 Binder 机制中的重要一环,Android 系统中担负这一重任的就是 Parcel。Parcel 是一种数据的载体,用于承载希望通过 IBinder 发送的相关信息(包括数据和对象引用)。正是基于 Parcel 这种跨进程传输数据的能力,进程间的 IPC 通信才能更加平滑可靠。 阅读详情

第34篇:Java序列化与反序列化详解

📌 系列导航:《Java 100 天进阶之路》完整目录 |
⬅️ 上一篇:第33篇:Java中的static关键字详解 |
➡️ 下一篇:第35篇:Java异常处理最佳实践


一、核心知识点

  • 序列化:将对象转换为字节流,便于存储或网络传输
  • 反序列化:将字节流恢复为 Java 对象
  • Serializable 接口(标记接口,无方法)
  • transient 关键字:跳过序列化
  • serialVersionUID 的作用:版本兼容性
  • 序列化的注意事项(安全、性能、版本)

二、通俗讲解(1分钟开心学)

1. 什么是序列化?

把内存中的 Java 对象变成一串字节(字节流),可以保存到文件、数据库,或者通过网络发送。反序列化就是反过来,把字节流恢复成对象。

2. 如何让一个类可序列化?

实现 java.io.Serializable 接口,它没有任何方法,只是一个“标记”,告诉 JVM:这个类的对象可以被序列化。

3. transient 关键字

如果某个字段不想被序列化(比如密码、缓存数据),可以加上 transient。序列化时会忽略它,反序列化后该字段为默认值(null、0、false)。

4. serialVersionUID

这是一个版本号,用于验证序列化的对象和接收方的类是否兼容。如果没有显式定义,JVM 会根据类结构(字段、方法等)自动生成一个。如果类结构改变(比如增加字段),自动生成的 UID 就会变,导致反序列化旧数据时抛出 InvalidClassException。因此建议手动定义:

private static final long serialVersionUID = 1L;

5. 安全性警告

反序列化不可信的数据可能存在安全风险(反序列化漏洞),攻击者可以构造恶意字节流执行任意代码。所以不要反序列化从网络接收的未经验证的数据。

生活类比:
序列化就像把一堆积木(对象)拆成零件(字节流),装进盒子。反序列化就是按照说明书把零件重新拼回原样。transient 就像某些零件不放进盒子(如纸条上的密码)。serialVersionUID 就像盒子上写的“拼装图纸版本号”,如果版本不对,就拼不起来。

三、实操代码案例 + 场景说明

场景:保存用户对象到文件,并从中恢复。

import java.io.*;
import java.util.ArrayList;
import java.util.List;

// 可序列化的用户类
class User implements Serializable {
    private static final long serialVersionUID = 1L;  // 版本号,建议显式定义
    
    private String username;
    private transient String password;  // 密码不序列化
    private int age;
    
    public User(String username, String password, int age) {
        this.username = username;
        this.password = password;
        this.age = age;
    }
    
    @Override
    public String toString() {
        return "User{username='" + username + "', password='" + password + "', age=" + age + "}";
    }
}

public class SerializationDemo {
    public static void main(String[] args) throws Exception {
        // 1. 序列化:对象 -> 文件
        User user = new User("张三", "123456", 25);
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("user.ser"));
        oos.writeObject(user);
        oos.close();
        System.out.println("序列化完成");
        
        // 2. 反序列化:文件 -> 对象
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("user.ser"));
        User restored = (User) ois.readObject();
        ois.close();
        System.out.println("反序列化得到的对象:" + restored);
        // 输出:password 为 null(transient 导致)
        
        // 3. 序列化多个对象到同一个文件
        List<User> userList = new ArrayList<>();
        userList.add(new User("李四", "pwd1", 30));
        userList.add(new User("王五", "pwd2", 28));
        
        ObjectOutputStream oos2 = new ObjectOutputStream(new FileOutputStream("users.ser"));
        oos2.writeObject(userList);   // 序列化整个集合
        oos2.close();
        
        ObjectInputStream ois2 = new ObjectInputStream(new FileInputStream("users.ser"));
        List<User> loadedList = (List<User>) ois2.readObject();
        ois2.close();
        System.out.println("加载的用户列表:" + loadedList);
    }
}

四、避坑要点

错误/误区后果正确做法
没有实现 Serializable 就序列化NotSerializableException让类实现 Serializable
没有定义 serialVersionUID,然后修改了类结构反序列化旧数据失败,抛 InvalidClassException显式定义 serialVersionUID 并谨慎维护
静态变量被序列化静态变量不属于对象,不会序列化理解:序列化只保存对象状态,不保存类状态
反序列化不可信数据安全漏洞(反序列化攻击)避免反序列化外部数据;使用白名单或替代格式如 JSON

五、面试高频考点

Q1:为什么需要 serialVersionUID?

保证序列化和反序列化时的版本一致性。如果不显式定义,JVM 会根据类结构生成哈希值,类稍作改动 UID 就会变,导致旧数据无法反序列化。

Q2:transient 和 static 变量会被序列化吗?

static 变量属于类,不序列化;transient 变量在序列化时被忽略,反序列化后为默认值。

Q3:如何避免反序列化漏洞?

  1. 不要反序列化不受信任的数据;2. 使用 ObjectInputStream 的子类并重写 resolveClass 实现白名单;3. 改用 JSON 或 Protobuf 等安全格式。

六、练习题

  1. 设计:编写一个 Employee 类,实现 Serializable,其中 salary 字段不需要序列化,id 和 name 需要。
  2. 动手:将对象序列化到文件,然后修改类(增加一个字段),再反序列化旧文件,观察异常。然后加上 serialVersionUID 再试。
  3. 分析:transient 和 static 都导致字段不被序列化,但它们的根本区别是什么?

📊 你的学习进度

  • 当前:第34篇 / 共44篇 · 第五阶段:工具类、异常最佳实践、序列化(第32~35篇)
  • ✅ 已完成:第1~33篇
  • 📖 正在学:第34篇
  • ⏳ 待学习:第35~44篇

👉 📚 完整目录 & 学习指南 | 🔥 订阅本专栏,不错过每一篇

💡 本专栏每篇都包含:避坑表 + 面试高频考点 + 练习题。每天30分钟,100天拿offer!


👉 下一篇文章预告

《第35篇:Java异常处理最佳实践》

内容简介:异常处理原则(不吞异常)、try-with-resources、异常链与包装、自定义异常规范、日志记录最佳实践。

💡 学完这篇,你将写出更健壮的异常处理代码,面试再问异常处理轻松回答。

📌 《Java 100 天进阶之路 | 从入门到上岗就业》 每天一篇,建议收藏 + 关注,一起100天拿offer!
👉 点击关注我,更新后第一时间收到推送!
📌 除了Java,我也在深挖智能物流实战(出版社WMS、托盘调度、机器学习落地)。如果你对技术在不同领域的实战感兴趣,欢迎点击我的头像,看看专栏《出版社物流WMS智能调度实战》。技术相通,思路可鉴。

2024年游戏策划最新面试题及答案 1. **游戏策划**:负责游戏设计和开发的创意和技术过程。2. **主要职责**:设计游戏玩法、故事、角色、世界等。4. **游戏机制**:定义玩家如何与游戏世界互动的规则。13. **引人入胜的角色**:深入的背景故事、个性特征。3. **游戏平衡**:确保游戏公平、有趣且具有挑战性。7. **RPG特点**:角色发展、故事驱动、玩家选择。12. **关卡设计技巧**:挑战性、流动性、视觉引导。11. **游戏关卡设计**:创建游戏世界的不同阶段。5. **游戏循环**:玩家在游戏中重复的行为模式。 阅读详情

相关推荐

【Unity】ABB CRB 15000 外部引导运动实战:从配置到实时控制

本文详细介绍了ABB CRB 15000协作机器人的外部引导运动(EGM)功能在Unity环境中的实战应用。从RobotStudio配置到Unity实时通信架构,再到EGM运动控制技巧和问题排查,全面解析如何实现机器人的高精度实时控制。通过实际案例展示EGM技术在精密装配等场景中的显著效果,帮助开发者快速掌握这一先进技术。

weixin_29057695的博客 441

《2026全新 | Java 100 天进阶之路:从零基础到上岗就业,108篇完整学习地图》

摘要:不背八股文,不堆概念。44篇基础 + 64篇进阶(共108篇),100天助你达到Java就业水平,从容面对技术面试。 👉 零基础入门 / 校招社招突击 / 1-3年Java后端提升 / 想系统复盘全栈知识的开发者。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 9583

SOME/IP序列化与反序列化深度探索

通过这次深度的探索之旅,我们看到SOME/IP序列化远不止是枯燥的技术规范,而是智能汽车时代的"无声英雄"。它就像一位技艺精湛的同声传译,在汽车的各个智能系统之间架起沟通的桥梁;它就像一位细心的包装工,确保珍贵的数据在传输过程中完好无损;它更像一位智慧的调度员,在复杂的网络环境中找到最优的通信路径。从基础的类型转换到复杂的安全防护,从性能优化到未来展望,序列化技术一直在默默进化,支撑着汽车电子架构向更智能、更安全、更高效的方向发展。

weixin_42108533的博客 1526

【自动驾驶】控制算法(十)深度解析车辆纵向控制 | Carsim 油门刹车标定表的制作...

写在前面: ???? 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。???? ???? 人生如戏,我们并非能选择舞台和剧本,但我们可以选择如何演绎 ????感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行~~~文章目录引言一、油门标定原理1.1 油门与速度、加速度的关系1.2 油门控制曲面模型的构建二、油门标定表的制作流程...

qq_35485206的博客 2130

智慧城市项目实战:如何将你的地理数据从城市坐标系(如上海2000)转换到国家CGCS2000?

本文详细介绍了智慧城市项目中地理数据坐标系转换的全流程解决方案,重点讲解如何将城市坐标系(如上海2000)转换到国家CGCS2000。通过七参数布尔莎模型、ArcGIS Pro、QGIS开源方案及Python编程实现,帮助实施团队解决坐标系不统一的技术难题,确保空间分析精度。

weixin_28725949的博客 295

数据格式 、序列化和反序列化

对于特殊数据类型(如)或复杂转换逻辑,Jackson 提供了强大的自定义功能。场景:处理默认情况下,Jackson 无法直接序列化,需要自定义转换器-10。方法一:使用和注解@Override@Override方法二:通过 Module 注册(推荐,全局生效)@Bean// 注册 Java 8 时间模块,这是处理 Java 8 日期时间更标准、简便的方式// 禁用将日期序列化为时间戳。

paishishaba的博客 881

使用 Simulink + Simscape Electrical 对基于VSG控制的背靠背变流器整流侧进行建模与仿真

本文介绍了基于Simulink的直驱风电系统背靠背变流器整流侧虚拟同步发电机(VSG)建模方法。首先阐述了直驱风电系统结构和VSG控制的作用,然后详细指导了模型搭建过程:从创建项目、添加PMSG和变流器模块,到搭建主电路拓扑和实现VSG控制逻辑。重点说明了VSG控制器如何模拟传统同步发电机的特性,并提供了仿真设置和结果分析方法。该模型可用于研究风电系统在不同工况下的响应特性,为新能源发电系统设计提供重要参考。

amy_mhd的博客 176

《Java 100 天进阶之路》第33篇:Java中的static关键字详解

本文详细讲解了Java中static关键字的用法,包括静态变量、静态方法、静态代码块和静态导入等核心概念。通过实例代码演示了如何统计对象创建次数,并分析了静态成员的内存分配机制。文章还总结了常见误区(如静态方法中使用this)和面试高频考点(如静态变量存储位置),最后提供了练习题帮助巩固知识。作为Java进阶系列的第33篇,本文为后续学习序列化技术奠定了基础,适合有一定Java基础的开发者阅读。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 654

点云配准SIFT+SI+RANSAC+ICP

Spin Image(SI)是一种用于点云数据描述的特征描述子,广泛应用于三维点云配准、识别和重建等领域。它能够捕捉点云中的局部几何信息,具有旋转不变性和部分平移不变性等优点,是一种非常强大的特征描述子。Spin Image是一种强大的点云特征描述子,具有旋转不变性、局部几何信息捕捉等优点,适用于点云配准、目标识别和三维重建等多个领域。通过合理选择局部区域、建立参考框架和计算描述子,可以充分利用Spin Image描述点云的特征,从而实现各种三维场景分析和处理任务。

点云兔子的博客 553

内网渗透(二)之基础知识-工作组介绍

在一个大型单位里,可能有成百上千台计算机互相连接组成局域网,它们都会列在"网络"(网上邻居)内。如果不对这些计算机进行分组,网络的混乱程度是可想而知的 为了解决这一问题,产生了工作组( Work Group)这个概念。将不同的计算机按功能(或部 门)分别列入不同的工作组,例如技术部的计算机都列入"技术部"工作组、行政部的计算机都 列入"行政部"工作组。要想访问某个部门的资源,只要在"网络"里双击该部门的工作组名 就可以看到该部门的所有计算机了。相比不分组的情况,这样的情况有序得多(尤其对大型局域网来说)。

把自己活成一道光,因为你不知道,谁会借着你的光,走出了黑暗。请保持心中的善良,因为你不知道,谁会借着你的善良,走出了绝望。请保持你心中的信仰,因为你不知道,谁会借着你的信仰,走出了迷茫。请相信自己的力量,因为你不知道,谁会因为相信你,开始相信了自己.... 1210

java 漏洞挖掘_java反序列化漏洞原理研习

零、Java反序列化漏洞java的安全问题首屈一指的就是反序列化漏洞,可以执行命令啊,甚至直接getshell,所以趁着这个假期好好研究一下java的反序列化漏洞。另外呢,组里多位大佬对反序列化漏洞都有颇深的研究,借此机会,努力学习,作为狼群中的哈士奇希望成功的继续伪装下去,不被识破,哈哈哈哈!!!参考文档:感谢所有参考文献的作者:1、https://www.cnblogs.com/bencake...

weixin_30141959的博客 496

【FPGA教程案例49】控制案例1——基于FPGA的PID控制器verilog实现

PID控制器产生于1915年,PID控制律的概念最早是由LYAPIMOV提出的,到目前为止,PID控制器以及改进的PID控制器在工业控制领域里最为常见。PID控制器(比例-积分-微分控制器),由比例单元 P、积分单元 I 和微分单元 D 组成。通过Kp,Ki和Kd三个参数的设定。PID控制器主要适用于基本线性和动态特性不随时间变化的系统。图1为PID控制器的基本结构框图。PID控制器以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。...

FPGA/MATLAB学习教程/源码/项目合作开发 4521

java移除序列化_Java中的序列化、反序列化-serializable和serialversionUID

在Java项目中,我们经常对实体类进行implement serializable,在实体类中又加上一句private static final long serialVersionUID = 5177165015785112433L;最开始只知道是跟实体类的序列化有关,但是没有深究,昨天突然想起来了,于是想知道到底是什么东西,在这里小手一抖,记录一下......这里补充一下小知识:1、序列化、反...

weixin_39929721的博客 573

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

《Java 100 天进阶之路》第44.1篇:Java常用工具类与异常处理速查表(2026版)

基础篇外挂第六弹!本文汇总 10 组工具类与异常处理实用速查:Objects 核心方法(null 安全三板斧:equals、hashCode、toString)、Collections 核心方法(排序/反转/不可变/同步包装)、Arrays 核心方法(排序/二分查找/拷贝/转 List)及其陷阱(Arrays.asList 固定大小、binarySearch 前需排序)、Collections.unmodifiableXxx 是视图陷阱、try-with-resources 标准模板、自定义异常规范、序列化

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 180

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【序列化】Java中将使用PHP序列化工具将数据序列化

在项目中需要和PHP公用一个MySQL数据库,有些数据需要序列化之后保存,这就需要将待存储的数据序列化之后存到数据库中,取出的时候,需要反序列化之后才能正常使用。 原数据: {&quot;06008816930683722.jpg&quot;, &quot;06008816930681525.jpg&quot;} 数据库中存的数据是这样的: a:1:{s:5:&quot;buyer&quot;;a:2:{i:1;s:21:&quot;060

种一棵树最好的时间是十年前,其次是现在。 3149

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java序列化与JSON序列化大比拼2(alibaba/fastjson)

一、背景 前面发了一篇引起了一些争论(http://my.oschina.net/noahxiao/blog/112759),有人建议alibaba/fastjson不错,我还是继续上次的测试程序加入了alibaba/fastjson的测试实现,来测一测。 二、测试方式 同前一篇(http://my.oschina.net/noahxiao/blog/112759)中的一样,测试

Ryan Z 的技术日志 2604

《Java 100 天进阶之路》第35篇:Java异常处理最佳实践

本文总结了Java异常处理的最佳实践,包括核心原则、异常分类、资源管理、日志记录等关键知识点。重点强调:只捕获能处理的异常,避免空catch;区分检查型异常和运行时异常的使用场景;推荐使用try-with-resources自动关闭资源;正确记录异常日志并保留完整堆栈信息。文章通过代码示例演示了异常包装、参数校验等常见场景,并提供了常见错误对照表。适合Java开发者系统学习异常处理规范,提升代码健壮性。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 632

java序列化

原文出处:天凉好个秋 转发:http://www.importnew.com/24490.html 前言 对于Java的序列化,一直只知道只需要实现Serializbale这个接口就可以了,具体内部实现一直不是很了解,正好这次在重复造RPC的轮子的时候涉及到序列化问题,就抽时间看了下 Java序列化的底层实现,这篇文章算是这次的学习小结吧。 第一部分:What Java序列化是指把Ja...

jiangbinbin的博客 577

Json 序列化和反序列化研究

概念json 序列化:把 javabean 转换成 json 字符串json 反序列化:把 json 字符串转换成对应的 javabean问题序列化时,是调用 getXxx 方法来获取 xxx 属性的值吗?反序列化时,是调用 setXxx 方法来设置 xxx 属性的值吗?试验我们用一个 People 类来做试验,注意代码public class People { /** 姓名 **/ ...

li12412414的博客 672

Java序列化与JSON序列化大比拼

一、背景 有项目需要传输Map结构的数据,有人倾向用Java序列化来做,有人倾向用JSON的序列化来做。所以我们还是比比吧。 Java观点:Object2Object,使用时简单快速。 JSON观点:JSON格式与语言无关,扩展性强,速度也应该不慢。 大家可能对Java序列化都有一个错误的认识,认为Java序列化比JSON的序列化效率高并且序列化的数据小,其实实际上并不一定是这样,

编写可维护的代码 413

【java序列化】Java序列化算法透析【转】

转自:http://longdick.iteye.com/blog/458557 作者longdick http://longdick.iteye.com Serialization (序列化)是一种将对象以一连串的字节描述的过程;反序列化 deserialization 是一种将这些字节重建成一个对象的过程。 Java 序列化 API 提供一种处理对象序列化的标准机制。...

delengyao1368的博客 171

java存储数字序列用什么类型_JAVA基础4---序列化和反序列化深入整理(JDK序列化)...

一、什么是序列化和反序列化?序列化:将对象状态信息转化成可以存储或传输的形式的过程(Java中就是将对象转化成字节序列的过程)反序列化:从存储文件中恢复对象的过程(Java中就是通过字节序列转化成对象的过程)二、为什么要序列化和反序列化?Java中对象都是存储在内存中,准确地说是JVM的堆或栈内存中,可以各个线程之间进行对象传输,但是无法在进程之间进行传输。另外如果需要在网络传输中传输对象也没有办...

weixin_29269441的博客 248

Java序列化

本文讲解了Java序列化的机制和原理。从文中你可以了解如何序列化一个对象,什么时候需要序列化以及Java序列化的算法。有关Java对象的序列化和反序列化也算是Java基础的一部分,下面对Java序列化的机制和原理进行一些介绍。 Java序列化算法透析 Serializ...

chenyijie1529的博客 101

Java序列化原理解析

Serialization (序列化)是一种将对象以一连串的字节描述的过程;反序列化 deserialization 是一种将这些字节重建成一个对象的过程。 Java 序列化 API 提供一种处理对象序列化的标准机制。在这里你能学到如何序列化一个对象,什么时候需要序列化以及 Java 序列化的算法,我们用一个实例来示范序列化以后的字节是如何描述一个对象的信息的。

Cry4TheMoon的博客 216

java序列化反序列化原理

Java序列化算法透析   Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。Java序列化API提供一种处理对象序列化的标准机制。在这里你能学到如何序列化一个对象,什么时候需要序列化以及Java序列化的算法,我们用一个实例来示范序列化以后的字节是如何描述一个对象的信息的。 序列化的必要性 J

guyueyouxia的博客 1381
上一篇: 《Java 100 天进阶之路》第33篇:Java中的static关键字详解
下一篇: 《Java 100 天进阶之路》第35篇:Java异常处理最佳实践
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值