一) 何为序列化(Serialize)
将Java 对象序列化为
二进制文件的技术称为序列化。
二)何时需要使用到序列化技术
大致三种情况吧:
a)当你想把的内存中的对象写入到硬盘的时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;
三)Hello, Serialize
话不多说,给个简单例子:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class SerializeClass implements Serializable {
private static final long serialVersionUID = 1L;
private String name = "thaIm";
private transient String ignoreStr = "ignore";
public static int staticVar = 5;
public static void main(String[] args) {
try{
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("result.obj"));
out.writeObject(new SerializeClass());
out.close();
SerializeClass.staticVar = 10;
ObjectInputStream oin = new ObjectInputStream(new FileInputStream("result.obj"));
SerializeClass sc = (SerializeClass) oin.readObject();
oin.close();
System.out.println(sc.getName()+"=="+sc.getIgnoreStr()+"=="+SerializeClass.staticVar);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public void setIgnoreStr(String ignoreStr) {
this.ignoreStr = ignoreStr;
}
public String getIgnoreStr() {
return ignoreStr;
}
}
程序的输出结果: thaIm==null==10
和你想的一样么?
四)serialVersionUID
如果你第一次接触java序列化,可能会对以上代码中的serialVersionUID字段很好奇。这看似多余的东西到底有何用途呢?且听我娓娓道来~~
情境:两个客户端 A 和 B 试图通过网络传递对象数据,A 端将对象 C 序列化为二进制数据再传给 B,B 反序列化得到 C。
实现条件: A B 两个客户端SerializeClass类有相同的:
1)类路径 2)功能代码 3)序列化ID,即serialVersionUID
而之所以要增加序列化ID一致这个条件,是因为它的存在对于代码的版本控制,代码安全都有不小的好处。
五)多说几句
1)关键字transient,它可使字段避免被序列化,反序列化时该字段取默认值(比如String的话就为null,int的话为0) 上述例子中 private transient String ignoreStr = "ignore";说明了该情况。
2)static 字段不会被序列化。原因也很简单,它是类的变量,不是某个实例的变量。注意上述例子中的语句 SerializeClass.staticVar = 10;
3)序列化存储规则。 对同一对象两次序列化入文件,第二次的序列化将只新增引用信息,以引用第一次序列化的对象。这样做不但可以保证反序列化后两个对象==,而且还能节省不少磁盘空间。是个非常不错的序列化规则哦!
分享到:
相关推荐
"addison-common-cached"项目就是针对这一需求提供的一种解决方案,它基于Jedis实现,并且支持读写分离以及多种序列化方式,如HessianSerialize、Hessian2Serialize和JavaSerialize。下面将详细阐述这些知识点。 ...
Serialize and Deserialize Java 示例程序。简单来讲,它的数据格式与json类似,但是在存储时对数字、多字节字符、数组等都做了很多优化,减少了无用的字符,二进制格式,也保证不用字符化带来额外的存储空间的增加...
php的serialize/unserialize,方便把一个数组序列化和反序列化,但是要和java交互,就比较麻烦了。通过这个工具类可实现很好的php与java的交互。 博客地址:...
Jquery serialize() 中文乱码及解决方法 Jquery serialize() 方法在处理中文数据时,经常会出现乱码问题。这种问题的原因是 serialize() 方法自动调用了 encodeURIComponent 方法将数据编码了,从而导致中文乱码。...
将java数据 序列化成PHP的格式 a:4:{s:6:"title2";s:13:"这是标题2";s:6:"title3";s:13:"这是标题3";s:5:"title";s:13:"这是标题1";s:6:"title4";s:13:"这是标题4";} 或者a:1:{i:0;a:1:{s:4:"name";s:10:"这是1321";...
•Efficiently access files and directories, read/write binary or text data, and serialize objects •Work with Java SE 8’s regular expression package •Make the most of XML in Java: parsing, ...
public JsonElement serialize(java.sql.Date src, Type typeOfSrc, JsonSerializationContext context) { return new JsonPrimitive(src.getTime()); } } public class UtilDateSerializer implements ...
void serialize(); } ``` #### 10. 访问修饰符 - **用途**:控制对类、方法和变量的访问级别。 - `private`:仅限于当前类内部访问。 - `protected`:允许同包内或子类访问。 - `public`:完全公开,允许任何...
```java class Node { Object element_; Node[] children_; public Node(Object element) { this.element_ = element; this.children_ = new Node[0]; // 初始化为空数组 } public void addChild(Node ...
String jsonString = serializer.serialize(person); System.out.println(jsonString); // 输出:{"age":30,"name":"John"} ``` 3. 将Java对象转换为JSON字符串数组: 如果你需要将多个对象转换为一个JSON字符...
String jsonString = json.serialize(obj); // 反序列化 MyJavaObject deserializedObj = (MyJavaObject) json.deserialize(jsonString, MyJavaObject.class); ``` 5. **org.springframework.boot内置库** ...
- **数据读取**:相反地,当MFC程序需要向Java Applet发送数据时,它通过`Serialize`方法中的`!IsStoring`分支将数据转换为Big-Endian格式,然后再通过Socket发送给Java Applet。 ##### 3.2 字节顺序转换 由于Java...
@Expose(serialize = false, deserialize = false) private String password; @Expose private String sensitiveData; } ``` 5. **总结** Java序列化是强大而灵活的工具,但也需要注意隐私和性能问题。通过...
具体来说,Java程序可以通过Socket的writeUTF函数将数据编码成字符串形式发送给服务器端的MFC程序,而MFC程序则使用Serialize函数解析接收到的字符串,提取出其中的数据。 ### 工作环境与过程 在文章中提到的工作...
7. Java高级特性:如Java包的导入和声明(import, package, class),Java的序列化机制(如transient, serialize),以及Java 5引入的泛型(如List<类型>)。 8. Java中的异常类:包括java.io包下的异常类、java....
当你需要自定义JSON转换规则时,可以使用`JSONSerializer`类提供的`serialize()`方法,指定特定的转换策略。 5. **其他高级特性** `json-lib`还支持XML和JSON之间的转换、JSON格式的校验以及与其他数据类型(如...
android(包括java)序列化一个对象传给php去做处理,或是接到php的序列化的对象在java中做处理的工具jar包以及使用方法. 使用方法: byte[] b = null; b = PHPSerializer.serialize(一个对象);//将一个对象序列化后返回...
public byte[] serialize(Person person) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); try { dos.writeUTF(person.name); dos.writeInt...