JAVA序列化与反序列化 JAVA序列化是指把JAVA对象转换为字节序列的过程;反序列化是指把字节序列恢复为JAVA对象的过程。 接下来首先看一个简单的例子。...Main("aa",22); //System.out.println(main); serialize(main); } } 这里呢,其实就是写了一个文件输出流,将写入的内容传至...而后定义主函数,实例化对象并传入name=aa,age=22,并序列化main对象。...序列化实现的一些特点 1、静态成员变量不能被序列化 序列化是针对对象属性的,而静态成员变量是属于类的 2、transient标识的对象成员变量不参与序列化 这个可以用上面的示例进行测试,我们在name...hashCode处理的变量是Key,而Key则是我们上文hash中传入的参数,也就是我们之前写的内容 hashmap.put(new URL("http://xxx"),1); // 传进去两个参数,
当然我们的数据必须能够被序列化,或者说可以通过 intent.putExtra() 传的,如下图: public @NonNull Intent putExtra(String name, String...而HashMap内部则是数组+链表的结构,在数据量较少的情况下,HashMap的Entry Array比ArrayMap占用更多的内存。...从本质上将,它也是一个文件,但是系统对它的读写有一定的缓存策略,即内存中也会有一份数据,因此在多进程模式下就变得不可靠了。...除了通过文件交换一些文本信息外,还以通过序列化一个对象到文件系统中,在另一个进程中恢复。...如果需要服务端能回应客户端,就和服务端一样,我们还需要创建一个 Handler 以及 一个新的 Messenger,并把这个 Messenger 对象通过 Message 的 replyTo 参数传递给服务端
List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。 Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。...Set:无序、不可重复集合只允许有一个Null元素对象,取元素时,只能使用iterator迭代器逐一遍历。...使用CopyOnWriteArrayList来替换ArrayList 序列化和反序列化 序列化的意思就是将对象的状态转化成字节流,以后可以通过这些值再生成相同状态的对象。...对象序列化是对象持久化的一种实现方法,它是将对象的属性和方法转化为一种序列化的形式用于存储和传输。反序列化就是根据这些保存的信息重建对象的过程。 序列化: 将java对象转化为字节序列的过程。...反序列化: 将字节序列转化为java对象的过程。
同时,String 是 final 的,因此没有人可以通过扩展和覆盖行为来破坏 String 类的不变性、缓存、散列值的计算等。String 类不可变的另一个原因可能是由于 HashMap。...由于把字符串作为 HashMap 键很受欢迎。对于键值来说,重要的是它们是不可变的,以便用它们检索存储在 HashMap 中的值对象。...2)字符串已被广泛用作许多 Java 类的参数,例如,为了打开网络连接,你可以将主机名和端口号作为字符串传递,你可以将数据库 URL 作为字符串传递, 以打开数据库连接,你可以通过将文件名作为参数传递给...如果尝试序列化实现可序列化的类的对象,但该对象包含对不可序列化类的引用,则在运行时将引发不可序列化异常 NotSerializableException, 这就是为什么我始终将一个可序列化警报(在我的代码注释部分中...瞬态变量也不包含在 Java 序列化过程中, 并且不是对象的序列化状态的一部分。
同时,String 是 final 的,因此没有人可以通过扩展和覆盖行为来破坏 String 类的不变性、缓存、散列值的计算等。String 类不可变的另一个原因可能是由于 HashMap。...由于把字符串作为 HashMap 键很受欢迎。对于键值来说,重要的是它们是不可变的,以便用它们检索存储在 HashMap 中的值对象。...例如,为了打开网络连接,你可以将主机名和端口号作为字符串传递,你可以将数据库 URL 作为字符串传递, 以打开数据库连接,你可以通过将文件名作为参数传递给 File I/O 类来打开 Java 中的任何文件...如果尝试序列化实现可序列化的类的对象,但该对象包含对不可序列化类的引用,则在运行时将引发不可序列化异常 NotSerializableException, 这就是为什么我始终将一个可序列化警报(在我的代码注释部分中...瞬态变量也不包含在 Java 序列化过程中, 并且不是对象的序列化状态的一部分。
同时,String 是 final 的,因此没有人可以通过扩展和覆盖行为来破坏 String 类的不变性、缓存、散列值的计算等。String 类不可变的另一个原因可能是由于 HashMap。...由于把字符串作为 HashMap 键很受欢迎。对于键值来说,重要的是它们是不可变的,以便用它们检索存储在 HashMap 中的值对象。...如果你的Serializable类包含一个不可序列化的成员,会发生什么?你是如何解决的?...如果尝试序列化实现可序列化的类的对象,但该对象包含对不可序列化类的引用,则在运行时将引发不可序列化异常 NotSerializableException, 这就是为什么我始终将一个可序列化警报(在我的代码注释部分中...瞬态变量也不包含在 Java 序列化过程中, 并且不是对象的序列化状态的一部分。
同时,String 是 final 的,因此没有人可以通过扩展和覆盖行为来破坏 String 类的不变性、缓存、散列值的计算等。String 类不可变的另一个原因可能是由于 HashMap。...由于把字符串作为 HashMap 键很受欢迎。对于键值来说,重要的是它们是不可变的,以便用它们检索存储在 HashMap 中的值对象。...8、如果你的Serializable类包含一个不可序列化的成员,会发生什么?你是如何解决的?...如果尝试序列化实现可序列化的类的对象,但该对象包含对不可序列化类的引用,则在运行时将引发不可序列化异常 NotSerializableException, 这就是为什么我始终将一个可序列化警报(在我的代码注释部分中...瞬态变量也不包含在 Java 序列化过程中, 并且不是对象的序列化状态的一部分。
“服务版本”,当要更新内存中的数据的时候,并不直接在服务版本(假设是版本 a 数据)上更新,而是重新创建另一个版本数据(假设是版本 b 数据),等新的版本数据建好之后,再一次性地将服务版本从版本 a 切换到版本...如果要拷贝的对象是不可变对象,浅拷贝共享不可变对象是没问题的 对于可变对象来说,浅拷贝得到的对象和原始对象会共享部分数据,就有可能出现数据被修改的风险,也就变得复杂多了 /** * 原型模式--浅拷贝...……直到要拷贝的对象只包含基本数据类型数据,没有引用对象为止。.../** * 原型模式--深拷贝-递归拷贝对象 * * 递归拷贝对象、对象的引用对象以及引用对象的引用对象…… * 直到要拷贝的对象只包含基本数据类型数据,没有引用对象为止。...return null; } } 2.2.2 对象序列化与反序列化 第二种方法:先将对象序列化,然后再反序列化成新的对象 /** * 原型模式--深拷贝-对象序列化 *
同时,String 是 final 的,因此没有人可以通过扩展和覆盖行为来破坏 String 类的不变性、缓存、散列值的计算等。String 类不可变的另一个原因可能是由于 HashMap。...由于把字符串作为 HashMap 键很受欢迎。对于键值来说,不可变性是非常的重要,以便用它们检索存储在 HashMap 中的值对象。...如果你的Serializable类包含一个不可序列化的成员,会发生什么?你是如何解决的?...如果尝试序列化_实现了可序列化接口的类_的对象,但该对象包含对不可序列化类的引用,则在运行时将引发不可序列化异常 NotSerializableException, 这就是为什么我始终将一个可序列化警报...瞬态变量也不包含在 Java 序列化过程中, 并且不是对象的序列化状态的一部分。
数据抽象也就是对象的属性。过程抽象是对象的行为特征。 封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行封装隐藏。...线程安全性 String中的对象是不可变的,也就可以理解为常量,线程安全。...2).HashTable不允许null值(key和value都不可以) ;HashMap允许null值(key和value都可以)。...这种选择机制,使得一个单独的线程很容易来管理多个通道。 41.序列化与反序列化 把对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为对象的过程称为对象的反序列化。...传值和传引用的区别,Java是怎么样的,有没有传值引用。 一个ArrayList在循环过程中删除,会不会出问题,为什么。 @transactional注解在什么情况下会失效,为什么。
方法;不同包内,在子类中创建另一个子类的对象不能访问公共父类的protected方法;父类protected方法加上static修饰符,子类可以直接访问父类的protected方法。...编译和运行时候无法改变,不同的是对于操作类似常量的常见实例对象时不进行传参,而是进行在建立类似常量的类型和构建函数处理。...26 序列化,反序列化 前者将对象转换成字节流,后者将字节流换成对象,子类也可以进行序列化,对于静态属性字段不可以序列化,它不是对象。...文件 序列化过程 // 进行序列化的五个步骤 // 1 你的对象应该实现连接Serializable接口 // 2 进行导入Serializable // 3 建立一个文件输出流 // 4...,它的形式参数全部传递给该方法作为参数 lambda表达式在被类的实例方法替代的时候,一个参数作为调用者,后面的参数全部传递给该方法作为参数 lambda表达式在被构造器替代的时候,它的形式参数全部传递给构造器作为参数
线程安全性 String中的对象是不可变的,也就可以理解为常量,线程安全。...2).HashTable不允许null值(key和value都不可以) ;HashMap允许null值(key和value都可以)。...这种选择机制,使得一个单独的线程很容易来管理多个通道。 41.序列化与反序列化 把对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为对象的过程称为对象的反序列化。...传递给PreparedStatement对象的参数可以被强制进行类型转换,使开发人员可以确保在插入或查询数据时与底层的数据库格式匹配。...传值和传引用的区别,Java是怎么样的,有没有传值引用。一个ArrayList在循环过程中删除,会不会出问题,为什么。@transactional注解在什么情况下会失效,为什么。
* 返回仅包含指定对象的不可变集合。 * The returned set is serializable. * 返回的集合是可序列化的。...* @返回一个仅包含指定对象的不可变集合。...(返回仅包含指定对象的不可变集合。)...* 返回仅包含指定对象的不可变列表。 * The returned list is serializable. * 返回的列表是可序列化的。...* @返回一个仅包含指定对象的不可变列表。
str是包含加载反序列化的序列化字符串的参数。 options是包含控制某些功能行为的选项的数组。...当攻击者控制传递给unserialize() 的序列化对象时,他可以控制所创建对象的属性。然后,通过控制传递给自动执行的方法,如_wakeup()的值,这将使攻击者有机会劫持应用程序流。...攻击者可以使用此反序列化漏洞来实现RCE攻击,因为用户提供的对象被传递给反序列化,并且Example2类具有在用户提供的输入上运行 eval() 的魔术函数。...要利用此RCE,攻击者只需将其数据 cookie 设置为一个序列化的Example2对象,并将hook属性设置为他想要执行的任何PHP代码。他可以使用以下代码片段生成序列化的对象: ? ?...一旦攻击者将序列化的对象传递到程序中,将引起以下问题: 攻击者将序列化的Example2对象作为数据 cookie 传递到程序中; 该程序在数据 cookie 上调用unserialize(); 因为数据
领取专属 10元无门槛券
手把手带您无忧上云