javase-io-210510-01

【Unity】制作简易三维场景 本文介绍如何制作一个三维场景 阅读详情

javase-io-210510-01

  • 序列化

序列化

ObjectOutputStream

ObjectInputStream


    序列化和反序列化必须实现 Serializable 接口

    Serializable 接口 它只是一个标志性接口
        public interface Serializable {
        }
        标志性接口作用:
            标志作用,java虚拟机看见这个类的实现了这个接口,可能对这个类惊醒特殊待遇


	虚拟机看到 Serializable 这个接口,会自动生成一个序列化版本号
	
在Java中采用什么机制来区分类:
		1、 首先通过类名进行对比,如果类名不一样,肯定不是一个类
		2、 如果类名一样,再怎么进行类的区分  ------->  通过序列化版本号进行区分
			
			例如: people_01  编写了 com.test.Student implements Serializable
				  people_02  编写了 com.test.Student implements Serializable
			
			不同的人编写了  同一个类名  的  不同的类  这时候就靠序列化版本号区分了
			对于java虚拟机来说,java虚拟机可以区分这两个类,因为这两个类都实现Serializable接口
			都有默认的序列化版本号,版本号不一样,因此就区分开了
			
			

自动生成序列化版本号的缺陷:
	一旦代码确定之后,不能后续修改
	如果被修改,必然会重新编译,此时会生成全新的序列化版本号
	这个时候java虚拟机会认为这是一个全新的类
解决:
	将序列化版本号手动写出来,不让他自动生成(例子:Worker.java)
	
 /*
        java虚拟机看见Serializable接口之后,会自动生成一个序列化版本号
        java虚拟机会默认提供这个序列化版本号
        我们把序列化版本号手动写出来,不建议自动生成

        java虚拟机识别一个类,先通过类名判断,在通过序列化版本号区分
     */
    /*
        如果过了几天几年,,,代码被修改了,,源代码会被重新编译
        如果不手动写序列化版本号,,编译后生成了全新的字节码文件,并且class文件再次运行时,
        java虚拟机生成的序列化版本号也会发生相应的改变
     */
     private static final long serialVersionUID = 1l;



Student.java

package com.bgy01;

import java.io.Serializable;

/*
    序列化和反序列化必须实现 Serializable 接口

    Serializable 接口 它只是一个标志性接口
        public interface Serializable {
        }
        标志性接口作用:
            标志作用,java虚拟机看见这个类的实现了这个接口,可能对这个类惊醒特殊待遇

    虚拟机看到 Serializable 这个接口,会自动生成一个序列化版本号
    这里没有写出来,java虚拟机会默认提供这个序列化版本号
 */
public class Student implements Serializable {
    private String name;
    private int age;

    public Student(){}

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

User.java

package com.bgy01;

/*
    transient   游离的,,,不参与序列化
 */

import java.io.Serializable;

public class User implements Serializable {
    private transient String name;
    private int age;
    private String address;

    public User(){}

    public User(String name, int age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                '}';
    }
}

Worker.java

package com.bgy01;

import java.io.Serializable;

public class Worker implements Serializable {

    /*
        java虚拟机看见Serializable接口之后,会自动生成一个序列化版本号
        java虚拟机会默认提供这个序列化版本号
        我们把序列化版本号手动写出来,不建议自动生成

        java虚拟机识别一个类,先通过类名判断,在通过序列化版本号区分
     */
    /*
        如果过了几天几年,,,代码被修改了,,源代码会被重新编译
        如果不手动写序列化版本号,,编译后生成了全新的字节码文件,并且class文件再次运行时,
        java虚拟机生成的序列化版本号也会发生相应的改变
     */
    private static final long serialVersionUID = 1l;
    private String name;

    public Worker() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Worker{" +
                "name='" + name + '\'' +
                '}';
    }
}

Demo01.java

package com.bgy01;

/*
    序列化
 */

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class Demo01 {
    public static void main(String[] args) throws IOException {

        // 创建java对象
        Student s = new Student("白光一",22);

        // 序列化
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("student"));

        // 序列化对象
        oos.writeObject(s);

        // 刷新
        oos.flush();

        // 关闭
        oos.close();

    }
}

Demo02.java

package com.bgy01;

/*
    反序列化
 */

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class Demo02 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {

        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("student"));

        // 开始反序列化,,读
        Object obj = ois.readObject();

        // 反序列化回来就是一个student对象,会自动调用Student的toSting()方法
        System.out.println(obj);

        // 关闭
        ois.close();

    }
}

Demo03.java

package com.bgy01;

/*
    可以序列化多个对象
 */

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

public class Demo03 {
    public static void main(String[] args) throws IOException {


        // 参与序列化的ArrayList集合以及集合中的Student都要实现java.io.Serializable接口
        List<Student> sList = new ArrayList<Student>();
        sList.add(new Student("bgy01",22));
        sList.add(new Student("bgy02",23));
        sList.add(new Student("bgy03",24));

        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("student01"));

        // 序列化
        oos.writeObject(sList);

        oos.flush();
        oos.close();

    }
}

Demo04.java

package com.bgy01;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;
import java.util.List;

public class Demo04 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {

        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("student01"));

        Object obj = ois.readObject();
        System.out.println(obj instanceof List);

        // 读
        List<Student> sList = (List<Student>) obj;
        for (Student s : sList) {
            System.out.println(s);
        }

        // 关闭流
        ois.close();

    }
}
LwIP TCP Client 解决长数据发送的困扰 问题描述 LWIP 的 TCP Client 发送数据可以调用 tcp_write() 函数,将数据储存在缓冲区里面,然后等待超时自动发送或者调用tcp_output()函数进行发送。 然而 tcp_write() 函数 需要发送的数据过长时,将无法发送,并返回 ERR_MEM。 tcp_write()函数解析 tcp_write()的函数代码很多,就不细看代码了, 先看tcp_write()的完整函数: err_t tcp_write(struct tcp_pcb *pcb, const void 阅读详情

相关推荐

精益六西格玛Python数字化应用开发-Day18 应用场景:家电企业生产效率优化

本文将重点介绍专门针对精益六西格玛黑带使用场景的 Python 库,这些库功能侧重于数据分析和流程优化,特别适用于 DMAIC 方法论和看板管理。考虑到读者具备中高级Python 使用经验,我们将深入探讨各库的高级功能和实际应用应用场景。 某家电企业生产线自动化程度高,数据量巨大,希望通过精益管理提升生产效率。企业借助 Python 脚本,打通各类数据源(MES、ERP、设备日志),自动归集生产数据,分析各工序的生产节拍、设备停机、效率损失,快速定位瓶颈环节

m0_56592100的博客 905

javase-io-210510-02

javase-io-210510-02 IO+Properties 读取配置文件 读取配置文件 IO + Properties Properties 是一个Map集合,key和value都是String类型 经常变的数据,可以单独写到一个文件中,让程序动态读取 那么我们就需要配置文件了,java规范中要求,属性的配置文件建议以 .properties 结尾,,但不是必须是 Demo01.java package com.bgy02; import java.io.FileNotFoundE

白光一的博客 240

机械臂开发必备:KDL库正逆解与动力学实战指南

在机器人算法领域,运动学与动力学计算是机械臂控制、仿真与轨迹规划的核心基础。正运动学描述关节空间到笛卡尔空间的映射,逆运动学则需要求解复杂的非线性方程,工程实现时常面临数值稳定性与调试效率的挑战。KDL(Kinematics and Dynamics Library)作为ROS生态中广泛使用的开源库,提供了统一的模型描述与高效求解器,将正逆解、雅可比矩阵及动力学参数计算封装为简洁接口,大幅降低开发门槛。无论是机械臂的笛卡尔空间轨迹跟踪,还是基于动力学模型的前馈控制,KDL都展现出强大的工程价值。本文从运动学

weixin_33860528的博客 2506

javase-io-210509-02

javase-io-210509-02 File FIle Fiel 1、 File类和四大家族没有关系,所以FIle类不能完成对文件的读和写 2、 FIle对象代表 文件和目录路径名的抽象表示形式 C:\bgy 这是一个文件 C:\bgy\bgy.txt 这也是一个文件 Demo01.java import java.io.File; import java.io.IOException; public class Demo01 { public static v

白光一的博客 286

MFRC522防冲突机制详解:当两张IC卡同时靠近读写器,会发生什么?

本文深入解析了MFRC522芯片在多张IC卡同时靠近RFID读写器时的防冲突机制,重点介绍了二叉树搜索算法在比特级的实现原理。通过详细的寄存器配置优化和实际工程案例,展示了如何有效解决信号碰撞问题,提升多卡场景下的读写性能。

weixin_29191669的博客 429

【v4l2】在Android SDK中交叉编译v4l2-ctl

为调试Android设备中camera的相关功能,需要引入v4l2-ctl工具。由于厂商提供的Android SDK源码中未集成v4l2-utils(包含v4l2-ctl以及其它组件的工具包),故需要下载v4l2-utils源码,并在Android SDK中交叉编译生成v4l2-ctl可执行文件。本文讲述其过程步骤。

rentong123的博客 1324

javase-collection-210623-02

javase-collection-210623-02 HashTable Properties HasTableTest01.java package bgy_hashtable01; import java.util.Hashtable; import java.util.Map; /* 1. HashTable中的方法都带有synchronized关键字,是线程安全的 线程安全目前有其它方案,HashTable对线程的处理导致效率较低,所以使用较少 2

白光一的博客 275

逆向选择启示录:一个失败高频策略如何意外跑赢市场

本文探讨了高频交易中的逆向选择现象,揭示了一个失败的高频策略如何通过简化意外跑赢市场。通过加密货币市场的实证分析和蒙特卡洛模拟,研究发现低预测性的简单策略反而更具鲁棒性,有效规避了逆向选择风险。文章还提供了小币种做市策略的优化框架和实践建议,为量化交易者提供了宝贵洞见。

weixin_29191669的博客 401

javase-collection-210619-01

javase-collection-210619-01 Collection------remove() 在集合中使用remove()方法,会使得集合的结构发生改变,如果此时迭代器还是原来的那个,会报错 例子:CollectionTest02.java 1. 如果使用集合的remove()方法进行删除,要通知迭代器更新,否则报错 2. 或者使用迭代器的remove()方法进行删除 CollectionTest01.java package bgy_test_2161901; import j

白光一的博客 253

RK3588上rknn_toolkit_lite2报错解决:手把手教你更新librknnrt.so的正确姿势

本文针对在RK3588平台上使用rknn_toolkit_lite2时遇到的“Invalid RKNN model version”等常见错误,提供了完整的诊断与解决方案。文章深入剖析了RKNN生态系统各组件(如librknnrt.so、RKNN Server)版本不兼容的根源,并手把手指导如何安全、正确地更新librknnrt.so运行时库,确保AI模型在RK3588 NPU上实现高效推理。

weixin_29189003的博客 520

智能驾驶域控制器的“终极大考”:解析EOL测试的核心价值与技术实践

在智能驾驶技术高速发展的今天,域控制器(Domain Controller)作为车辆“大脑”的核心部件,承担着传感器数据处理、决策规划、执行控制等关键任务。然而,这个集成了数十个芯片、运行着数百万行代码的复杂系统,如何确保其出厂前的功能安全与性能稳定?答案就藏在被称为“生产线最后一道防线”的EOL(End of Line)测试中。

汽车电子软件领域知识分享 703

javase-collection-210408-01

javase-collection-210408-01 什么是集合 集合继承图 Collection常用方法 集合遍历迭代 contains方法 什么是集合 集合就是一个容器,数组就是一个集合,它可以来容纳其他类型的数据 集合不能直接存储基本类型的数据,另外集合也不能直接存储java对象, 集合当中存储的都是java对象的内存地址,或者说是集合中存储的引用 注:集合在java中本身是一个容器,是一个对象,集合中任何时候储存的都是引用 在java中每一个不同的集合,底层会对应不同的数据结构。往不

白光一的博客 250

2025_NIPS_RAGRouter: Learning to Route Queries to Multiple Retrieval-Augmented Language Models

该研究聚焦检索增强生成(RAG)场景下的大语言模型(LLM)路由问题,提出了首个RAG感知的路由框架RAGRouter。核心解决现有路由方法依赖静态参数知识、忽略检索文档动态影响的缺陷,通过融合文档嵌入、RAG能力嵌入与对比学习,捕捉RAG引发的模型知识表征变化,为每个查询-文档对选择最优LLM。实验覆盖5个知识密集型任务、15个开源/闭源LLM,验证了RAGRouter在性能上超越最佳单LLM和非RAG感知路由方法,且通过阈值机制实现低延迟约束下的性能-效率平衡。

UnknownBody_2的博客 272

javase-collection-210623-01

javase-collection-HashMap-210623-01 HashMap HashMapTest01.java package bgy_hashmap01; /* 1. HashMap底层用的是 哈希表/散列表 的数据结构 1)哈希表是一个数组和单向链表的结合体 2)它是一个一维数组,数组中每一个元素是一个单向链表 3)数组:查询效率高,随机增删效率低 4)单向链表:随机增删效率高,查询效率低 1)

白光一的博客 234

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

javase-collection-210620-01

javase-collection-210620-01 List ArrayList ListTest01.java package bgy_list_01; import java.util.*; /* 1. List 特点: 有序可重复 1)有序:List集合中的元素有下标 从0开始,以1递增 2)可重复:存一个‘bgy’,还能再存一个‘bgy’ 2. List是Collection的子接口

白光一的博客 230

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

javase-collection-210624-01

javase-collection-210624-01 TreeSet Collections工具类 TreeSetTest01.java package bgy_treeset01; /* 1. TreeSet 集合底层实际上是一个TreeMap 2. TreeMap集合底层是一个二叉树 3. 放到TreeSet集合中的元素,等同于放到TreeMap集合key部分了 4. TreeSet集合 无序不可重复,可以按照元素的大小顺序自动排序,

白光一的博客 228

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

javase-io-210508-01

javase-io-210508-01 什么是IO IO分类 Java中IO四个部落 需要知道 1、什么是IO流 ​ I:Input ​ O:Output ​ 通过IO完成对硬盘文件的读和写 2、IO分类 1. 按照 流 的方式进行分类 以内存为参照物 往内存中去,叫做输入(Input),也叫读(Read) 从内存中出来,叫做输出(Output),也叫做写(Write) 2. 按照读取数据方式进行分类 一、 按照 字节方式

白光一的博客 217

javase-annotation-210710-01

javase-annotation-210710-01 注解解释 元注解 Retention源码 Target源码 注解解释 1) 注解 也叫注释,Annotation 2) 注解Annotation是一种引用数据类型,编译之后也是生成xxx.class文件 3) 自定义注解,语法如下: [修饰符列表] @interface 注解类型名{ } 4) 注解如何使用?在哪里使用? 注解使用语法格式: @注解类型名 注解可以出现在类上,属性上,方法上,变量上等

白光一的博客 211

javase-annotation-210710-02

javase-annotation-210710-02 注解中可以用的属性类型 反射获取类上的注解 反射获取类中方法上的注解 注解实例 注解中可以用的属性类型 MyAnnotation0301.java package bgy_annotation_02; public @interface MyAnnotation0301 { /* 注解当中的属性可以是哪种类型 byte short int long float double bool

白光一的博客 209

javase-reflect-210625-01

javase-reflect-210625-01 反射的理解 反射机制有什么用? 通过java语言中的反射机制可以操作字节码文件 类似于黑客。(可以读和修改字节码文件) 通过反射机制可以操作代码片段(class文件) 反射机制的相关类的包 java.lang.reflect.*; 反射机制的相关的重要类 java.lang.Class 代表整个字节码,代表一个类型。 代表整个类 java.lang.reflect.Method 代表字节码中的方法字节码。 代表类中的方法 J...

白光一的博客 206

javase-collection-210621-01

javase-collection-210621-01 LinkedList Vector LinkedListTest01.java package bgy_linkedlist01; /* LinkedList 的数据结构是 双向链表 基础单元为节点node 每一个节点node都有两个属性: 1. 存储的数据 2. 下一个节点的内存地址 LinkedList集合底层也是有下标的 ArrayL

白光一的博客 201

javase-javabase-210126-02

javase-javabase-210126-02 JavaDoc Scanner对象 重载 可变参数 递归 Java内存 数组 Arrays类 JavaDoc @author 作者名 @version 版本号 @since 指明需要最早使用的jdk版本 @param 参数名 @return 返回值情况 @throws

白光一的博客 199

javase-io-210509-01

javase-io-210509-01 FileReader FileWriter 拷贝 BufferedReader InputStreamReader BufferedWriter DataOutputStream DataInputStream PrintStream FileReader ​ 文件字符输入流,只能读取普通文本 ​ 读取文本内容,比较方便,快捷 Demo01 import java.io.FileNotFoundException; import java.io.FileRead

白光一的博客 197

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 285

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 346

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 198
上一篇: javase-io-210509-02
下一篇: javase-io-210510-02
白光一
博客等级 码龄9年 0粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值