什么是序列化?

html-css017

什么是序列化?,第1张

出自: http://www.importnew.com/17964.html

序列化与反序列化

序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。一般将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等。在网络传输过程中,可以是字节或是XML等格式。而字节的或XML编码格式可以还原完全相等的对象。这个相反的过程又称为反序列化。

Java对象的序列化与反序列化

在Java中,我们可以通过多种方式来创建对象,并且只要对象没有被回收我们都可以复用该对象。但是,我们创建出来的这些Java对象都是存在于JVM的堆内存中的。只有JVM处于运行状态的时候,这些对象才可能存在。一旦JVM停止运行,这些对象的状态也就随之而丢失了。

但是在真实的应用场景中,我们需要将这些对象持久化下来,并且能够在需要的时候把对象重新读取出来。Java的对象序列化可以帮助我们实现该功能。

对象序列化机制(object serialization)是Java语言内建的一种对象持久化方式,通过对象序列化,可以把对象的状态保存为字节数组,并且可以在有需要的时候将这个字节数组通过反序列化的方式再转换成对象。对象序列化可以很容易的在JVM中的活动对象和字节数组(流)之间进行转换。

在Java中,对象的序列化与反序列化被广泛应用到RMI(远程方法调用)及网络传输中。

%20是网页地址的空格符。html中的空格符是&nbsp&nbsp是我们平时使用的空格“ 的一种html表达方式。没有区别。其他的转义字符还有:& &< <> >" "&qpos '而%20是地址的空格符,因为地址不能包含空格。它是序列化后的空格符。在url传递参数的时候,一般都会序列化一下,以保证参数的安全。序列化,你可以理解为加密,在PHP和javascript中,都有这样的函数

Encoding.UTF8.GetBytes("<")[0].ToString("X")就是3C

Encoding.UTF8.GetBytes("'")[0].ToString("X")就是27

Encoding.UTF8.GetBytes(">")[0].ToString("X")就是3E

最好的办法是列一个数组,里面列出哪些字符要进行你说的转换

下面是Server.HtmlEncode的代码,也是这么做的

char ch = s[pos]

if (ch <= '>') {

switch (ch) {

case '<':

builder.Append("&lt")

break

case '>':

builder.Append("&gt")

break

case '"':

builder.Append("&quot")

break

case '&':

builder.Append("&amp")

break

default:

Debug.Assert(false, "Unexpected value for ch, ch=" + ch)

break

}

}

else {

#if ENTITY_ENCODE_HIGH_ASCII_CHARS

Debug.Assert(ch >= 160 &&ch <256, "ch >= 160 &&ch <256")

// The seemingly arbitrary 160 comes from RFC

builder.Append("")

builder.Append(((int)ch).ToString(NumberFormatInfo.InvariantInfo))

builder.Append('')

#else

Debug.Assert(false)

#endif // ENTITY_ENCODE_HIGH_ASCII_CHARS

}