转westlifesz的博文
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
序列化:序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。在另一端,反序列化将从该流重新构造对象。
是对象永久化的一种机制。
确切的说应该是对象的序列化,一般程序在运行时,产生对象,这些对象随着程序的停止运行而消失,但如果我们想把某些对象(因为是对象,所以有各自不同的特性)保存下来,在程序终止运行后,这些对象仍然存在,可以在程序再次运行时读取这些对象的值,或者在其他程序中利用这些保存下来的对象。这种情况下就要用到对象的序列化。
只有序列化的对象才可以存储在存储设备上。为了对象的序列化而需要继承的接口也只是一个象征性的接口而已,也就是说继承这个接口说明这个对象可以被序列化了,没有其他的目的。之所以需要对象序列化,是因为有时候对象需要在网络上传输,传输的时候需要这种序列化处理,从服务器硬盘上把序列化的对象取出,然后通过网络传到客户端,再由客户端把序列化的对象读入内存,执行相应的处理。
对象序列化是java的一个特征,通过该特征可以将对象写作一组字节码,当在其他位置读到这些字节码时,可以依此创建一个新的对象,而且新对象的状态与原对象完全相同。为了实现对象序列化,要求必须能够访问类的私有变量,从而保证对象状态能够正确的得以保存和恢复。相应的,对象序列化API能够在对象重建时,将这些值还原给私有的数据成员。这是对java语言访问权限的挑战。通常用在服务器客户端的对象交换上面,另外就是在本机的存储。
对象序列化的最主要的用处就是在传递,和保存对象(object)的时候,保证对象的完整性和可传递性。譬如通过网络传输,或者把一个对象保存成一个文件的时候,要实现序列化接口 。
*
Quote:
比较java.io.Externalizable和java.io.Serializable
http://www.zdnet.com.cn/developer/code/story/0,3800066897,39304080,00.htm
即使你没有用过对象序列化(serialization),你可能也知道它。但你是否知道 Java 还支持另外一种形式的对象持久化,外部化(externalization)?
下面是序列化和外部化在代码级的关联方式:
public interface Serializable {}
public interface Externalizable extends Serializable {
void readExternal(ObjectInput in);
void writeExternal(ObjectOutput out);
}
序列化和外部化的主要区别
外部化和序列化是实现同一目标的两种不同方法。下面让我们分析一下序列化和外部化之间的主要区别。
通过Serializable接口对对象序列化的支持是内建于核心 API 的,但是java.io.Externalizable的所有实现者必须提供读取和写出的实现。Java 已经具有了对序列化的内建支持,也就是说只要制作自己的类java.io.Serializable,Java 就会试图存储和重组你的对象。如果使用外部化,你就可以选择完全由自己完成读取和写出的工作,Java 对外部化所提供的唯一支持是接口:
voidreadExternal(ObjectInput in)
void writeExternal(ObjectOutput out)
现在如何实现readExternal() 和writeExternal() 就完全看你自己了。
序列化会自动存储必要的信息,用以反序列化被存储的实例,而外部化则只保存被存储的类的标识。当你通过java.io.Serializable接口序列化一个对象时,有关类的信息,比如它的属性和这些属性的类型,都与实例数据一起被存储起来。在选择走Externalizable这条路时,Java 只存储有关每个被存储类型的非常少的信息。
每个接口的优点和缺点
Serializable接口
· 优点:内建支持
· 优点:易于实现
· 缺点:占用空间过大
· 缺点:由于额外的开销导致速度变比较慢
Externalizable接口
· 优点:开销较少(程序员决定存储什么)
· 优点:可能的速度提升
· 缺点:虚拟机不提供任何帮助,也就是说所有的工作都落到了开发人员的肩上。
在两者之间如何选择要根据应用程序的需求来定。Serializable通常是最简单的解决方案,但是它可能会导致出现不可接受的性能问题或空间问题;在出现这些问题的情况下,Externalizable可能是一条可行之路。
要记住一点,如果一个类是可外部化的(Externalizable),那么Externalizable方法将被用于序列化类的实例,即使这个类型提供了Serializable方法:
private void writeObject()
private void readObject()
分享到:
相关推荐
tomcat kryo memcache session序列化 msm-memcached-session-manager-1.8.2
6. **存储数据**:在Memcache中存储数据是通过键值对完成的。例如,存储一个字符串: ```java client.set("key", 60, "value"); // key是键,60是过期时间(秒),value是要存储的值 ``` 7. **检索数据**:获取...
* Memcache 中的值可以是任何类型的数据,但需要能够被序列化。 * Memcache 中的缓存政策可以根据需要进行设置,例如设置缓存的过期时间或缓存的最大大小。 Memcache 是一种非常有用的技术,它可以帮助应用程序提高...
在自定义的session存储中,开发者可以设置`session.serialize_handler`来改变序列化和反序列化数据的方式。例如,`php_serialize`处理器使用PHP内置的序列化机制来存储会话数据,而`php`处理器则在序列化的数据前后...
在这个场景中,Kryo可能用于序列化session对象以便于在Memcache中存储。 3. **memcached-session-manager-2.0.0.jar**:这是Memcached Session Manager的核心库,它负责处理session的存储、恢复和过期策略,使得...
首先,我们要了解反序列化漏洞的基本概念。在PHP中,序列化是将对象转换为字符串的过程,以便存储或传输;反序列化则是将字符串恢复为原来的对象。当反序列化的数据不受严格验证时,攻击者可能注入恶意代码,从而...
3. **数据序列化与反序列化**:由于MemCache仅支持二进制数据,客户端需要负责将C++对象序列化为字节流,以及反序列化回对象。 4. **缓存策略**:根据业务需求,实现缓存失效策略,如LRU(最近最少使用)、TTL...
- 序列化与反序列化:默认情况下,PHP的Memcache扩展会自动处理数据的序列化和反序列化,允许存储复杂数据结构如数组和对象。 - 自动压缩:当数据超过一定大小时,Memcache会自动进行压缩,以节省内存空间。 **5. ...
3. `SerializationStrategy`:session数据通常需要序列化才能存储在memcache中,因此需要一种策略来处理Java对象到字节流的转换,以及字节流到Java对象的反序列化。 4. 配置文件:为了配置memcache session管理器,...
- 上述payload中涉及到了多个类和方法的嵌套使用,最终目的是为了在反序列化过程中执行`@riny($CBFG[1])`这行代码,其中`$CBFG`是一个预定义的变量,通常由框架内部设置,用于存储反序列化后的对象。 #### 四、总结...
- **序列化和反序列化**:由于Memcache仅支持字符串类型,因此在存储复杂数据结构时,需要先进行序列化处理。 总结,PHP7的memcache.dll文件是Windows环境下PHP7与Memcache服务通信的桥梁,对于利用Memcache提升...
此外,`memcacheclient-2.0`还提供了丰富的API接口,包括设置、获取、删除、批量操作等多种功能,同时支持自定义序列化和反序列化策略,以适应不同数据类型的存储需求。这些API设计简洁明了,易于理解和使用,使得...
php memcache 图形化管理工具 This source file is subject to version 3.0 of the PHP license, that is bundled with this package in the file LICENSE, and is available through the world-wide-web at the ...
在Memcache中,使用Kryo可以提高序列化和反序列化的效率,减少网络传输的开销。 6. **集群配置**: 在Memcache中,可以通过创建集群来提高容错性和可扩展性。当一台Memcache服务器出现问题时,其他服务器仍能继续...
3. `serialization-support.jar`: 由于Session对象通常需要序列化才能存储在Memcache中,这个库可能提供了必要的序列化和反序列化功能。 4. `transcoder.jar`: 可能包含了对不同类型数据进行编码和解码的类,以便...
1. **数据持久性**:Memcache不支持数据持久化,断电或重启后数据丢失,适用于临时存储。 2. **内存管理**:合理设置最大内存,防止因内存耗尽导致的服务器问题。 3. **并发竞争**:在多线程或多进程环境下,需注意...
这是一个php的memcache操作类可以下载看一下
- 为了确保高效性,应避免在Memcache中存储过大的数据对象,因为内存缓存的初衷是快速访问小数据片段。 - 考虑使用一致性哈希策略来平衡Memcache集群中的数据分布,防止数据丢失或重复。 - 定期检查并清理不再...
要从缓存中检索数据,可以使用`Memcache::get()`函数,传入相应的键。 ```php $cachedData = $memcache->get('myKey'); echo $cachedData; // 输出:Hello, Memcache! ``` 4. **删除缓存** 使用`Memcache::...
标题中的“自己写的一个php memcache操作类”指的是一个自定义的PHP类,用于与Memcached缓存系统进行交互。Memcached是一种广泛使用的分布式内存对象缓存系统,它能够提高Web应用的性能,通过存储数据在内存中,避免...