- 浏览: 123794 次
- 性别:
- 来自: 地球
文章分类
最新评论
-
754731046:
很适合对初学者适用,谢谢
Oracle存储过程详解 -
天明破晓:
我测试了,不好用
Java中的正则表达式验证各种电话号码 -
OracleX:
otom31 写道从来不用标签库,几乎不用struts,除了最 ...
标签库的优点、缺点大辩论 -
otom31:
从来不用标签库,几乎不用struts,除了最早公司要使用以外; ...
标签库的优点、缺点大辩论
实现Serializable借口的对象可以被转换成一系列字节,并可以在以后使用时完全恢复原来的样子。这一过程也可以在网络中进行,这样就可以先在windows机器上创建一个对象,对其序列化,然后通过网络发送给Linux机器,就可以在Linux机器上准确无误地恢复成原来的样子。整个过程不必关心数据在不同机器上如何表示,也不必关心字节的顺序或其他细节。
序列化的思想就是“冻结”对象,操作对象(写到磁盘,通过网络传输等),然后“解冻”对象,重新获得可用的Java对象。功能的实现要靠ObjectInputStream/ObjectOutputStream类,完全保真原数据,并且开发愿意用Serializable。
实现了Serializable接口的类为保证serialVersionUID 值跨不同 java 编译器实现的一致性,序列化类必须声明一个明确的 serialVersionUID 值。
ClassA.java
public class ClassA implements Serializable { private static final long serialVersionUID = 6013572251564847381L; private String name = "My name is a"; private ClassB b = null; ClassA() { b = new ClassB(); } public String show() { System.out.println("a.toString <a.name=\"" + this.name + "\" a.b.name=\"" + this.b.getName() + "\">"); return "a.toString <a.name=" + this.name + " a.b.name=" + this.b.getName() + ">"; // \" 双引号 // \' 单引号 // \\ 反斜线 } ....................... }
ClassB.java
public class ClassB implements Serializable{ private static final long serialVersionUID = -4324044767844361076L; private String name="My name is b"; ClassB(){} public String getName() { return name; } public void setName(String name) { this.name = name; } }
将对象内容保存到文本中
WriteSeri.java
public class WriteSeri { public static void main(String args[]){ ObjectOutputStream outObj=null; try { //将对象内容写入到文本中 FileOutputStream outStr=new FileOutputStream("obj.txt"); outObj=new ObjectOutputStream(outStr); ClassA a=new ClassA(); outObj.writeObject(a); System.out.println("write obj:"+a.show()); outObj.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { if (outObj != null) { outObj.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
输出结果:
a.toString <a.name="My name is a" a.b.name="My name is b">
write obj:a.toString <a.name=My name is a a.b.name=My name is b>
将文本内容还原给对象
ReadSeri.java
public class ReadSeri { public static void main(String args[]) { ObjectInputStream inObj = null; try { FileInputStream inStr = new FileInputStream("obj.txt"); inObj = new ObjectInputStream(inStr); ClassA a = (ClassA) inObj.readObject(); System.out.println("read object:" + a.show()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { if (inObj != null) { try { inObj.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
输出结果:
a.toString <a.name="My name is a" a.b.name="My name is b">
read object:a.toString <a.name=My name is a a.b.name=My name is b>
发表评论
-
AOP的实现(JDK动态代理)
2011-11-29 16:21 1006转自:http://www.blogjava.net/D ... -
短信平台总结(20111128)
2011-11-28 17:49 1web层套用公司框架,虽然struts1多少懂点了, ... -
Java 枚举7常见种用法
2011-11-27 22:54 893转自:http://helloyesyes.itey ... -
一个Java程序员应该掌握的10项技能
2011-11-18 11:57 10191、语法:必须比 ... -
Java回调函数使用
2011-08-16 16:14 719正常情况下开发人员使用已经定义好的API,这个过程叫 ... -
为什么要设置Java环境变量(详解)
2011-08-17 21:40 684从大二开始接触Java,之后是断断续续的学习。大三真正开始 ... -
很长空格的String转换成Array数组
2011-08-23 14:40 1300开发中碰到了一个需求,需要把键值对字符串分隔,但键值之 ... -
不同格式的日期字符串转换
2011-08-23 14:44 957先把字符串日期转换成对应的格式,然后再转换成日期 p ... -
JUint测试
2011-08-23 15:36 661ClassA.java public class Cla ... -
Java连接数据库方式大全
2011-08-23 15:49 865Mysql: String Driver=& ... -
解决Join方法的疑惑
2011-08-23 20:57 1013很长时间对join方法感到疑惑,不明白到底是谁要阻塞,谁要继 ... -
线程学习笔记【1】----进程、线程概念及创建线程
2011-08-27 22:33 8071.进程与线程 每个进程都独享一块内存空间,一个应用程 ... -
线程学习笔记【2】---Timer(定时器)
2011-08-28 09:15 784入门 public class Time01 { ... -
线程学习笔记【3】---互斥技术
2011-08-29 15:10 755第一个示例更多的是运用了内部类的特性: 内部类重要特点:可以 ... -
线程学习笔记【4】---线程之间通信
2011-08-29 17:31 752子线程先循环10次,然后主线程循环100次,再子线程循环10次 ... -
线程学习笔记【5】--ThreadLocal应用
2011-09-05 15:31 804基本的ThreadLocal使用 public clas ... -
各种创建单例模式的优缺点
2011-09-05 21:54 831单例模式应用于一个类只有一个实例的情况,并且为其实例提供一个全 ... -
Ant学习实例
2011-09-14 22:03 8041.安装Ant 先从http://ant.apache.or ... -
各种文件注释写法
2011-09-30 15:52 1266JSP注释 在JSP中注释最好用< ... -
敲回车光标跳到下一个输入框(只能在IE中使用)
2011-10-08 10:22 1760<html> <head> & ...
相关推荐
序列化是指将程序中的对象转换为一系列字节流的过程,主要用于保存对象的状态或在网络之间传输对象。序列化的主要目的是为了能够持久化保存对象的状态以及在不同系统间传输这些对象。 在Java中,通过实现`...
2. **如何实现反序列化**:使用`ObjectInputStream`的`readObject()`方法从流中读取对象: ```java try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("myfile.ser"))) { MyObject obj = ...
序列化不仅可以用于保存对象的状态,也可以在分布式环境中作为数据交换的手段。 在Java中,实现序列化需要让类实现`java.io.Serializable`接口。虽然这个接口没有定义任何方法,但是它的存在标记了该类的对象是可...
要实现一个对象的序列化,该对象的类必须实现`Serializable`接口。这是一个标记接口,没有包含任何方法,只是表明该类的对象是可以被序列化的。 下面是一些关于序列化的重要知识点: 1. **序列化标识符...
3. 存储和恢复:在需要保存对象时,调用序列化方法将对象转换为字节流,然后写入文件;在加载时,从文件读取字节流,再调用反序列化方法恢复对象状态。 C++中实现序列化的一种常见方式是使用`std::ofstream`和`std:...
需要注意的是,实现序列化的类应该谨慎处理其内部状态,因为序列化会保存对象的所有字段,包括私有(private)和受保护的(protected)成员。如果某个类的父类没有实现`Serializable`接口,那么子类仍然可以序列化,...
Java序列化是Java平台提供的一种持久化机制,它允许将对象的状态转换为字节流,以便存储到磁盘、数据库中或通过...不过,需要注意的是,序列化可能带来安全风险,如反序列化攻击,因此在设计和使用序列化时需谨慎处理。
总结来说,`Serializable`序列化是Java中一个基础但至关重要的特性,它使得对象状态的保存和传输成为可能。理解并熟练掌握序列化,可以帮助开发者更好地应对各种存储和通信需求。在实际应用中,要注意安全性、性能和...
- 对于反序列化,读取流并使用`Deserialize`方法恢复对象。 在处理包含图片的数据时,需要注意的是,图片通常不能直接作为字段存储在类中,而是需要转换为字节数组或Base64字符串。在序列化时,这些数据需要特殊...
### C#中Serializable的作用与对象序列化详解 #### 一、引言 在现代软件开发中,特别是基于.NET框架的应用程序开发中,对象序列化是一项非常重要的技术。它允许将对象的状态转换为一种持久的形式(如文件或网络传输...
1. 保存对象的状态:当需要将内存中的对象保存到文件或数据库中,以便后续恢复使用。 2. 网络传输:在网络通信中,可以通过序列化将对象转换为字节流,然后通过Socket进行传输。 3. RMI(Remote Method Invocation)...
【JAVA对象序列化保存为XML文件的工具类】 在Java编程中,对象序列化是一种将对象的状态转换为字节流的过程,以便可以存储或在网络上传输。而在反序列化时,这个字节流又可以恢复为原来的对象。Java提供了一个方便...
- 反序列化:使用`java.io.ObjectInputStream`的`readObject()`方法从输入流读取对象。 4. **优点**: - 数据持久化:将对象的状态保存到磁盘,下次可以恢复。 - 网络传输:将对象转换为字节流,方便在网络间传递...
通过实现`Externalizable`接口,可以在该方法中指定如何保存对象的状态。 **2.5 `writeReplace`方法** `writeReplace`方法允许开发者替换即将被序列化的对象。这在需要改变对象的引用或修改其状态时非常有用。 **...
使用 `Externalizable` 接口的主要优点在于可以更精确地控制序列化和反序列化过程,这对于需要自定义序列化逻辑的对象非常有用。 #### 六、序列化中的注意事项 - **`transient` 关键字**:使用 `transient` 可以...
序列化主要的目的是为了保存对象状态,便于对象在需要的时候可以重建,比如存储到文件中或通过网络传输。反序列化则是序列化的逆过程,用来恢复对象状态。 序列化通常在以下几种情况下被需要: 1. 当你想把内存中...
为了使一个Java对象能够被序列化,该对象所属的类必须实现`java.io.Serializable`接口。大部分JDK内置类如String和Date都已经实现了这个接口。另外,还有`java.io.Externalizable`接口,它继承自`Serializable`,但...
序列化是将对象转换为字节序列的过程,这个字节序列可以被保存到磁盘、发送到网络或者通过其他方式保存和传递。序列化的目的是为了能够恢复对象,即使在不同的时间或不同的环境中也能做到这一点。 2. **为什么要...