TreeMap源码分析八
来源:互联网 发布:热血江湖网络不稳定 编辑:程序博客网 时间:2024/05/20 06:07
转自:http://www.fengfly.com/plus/view-213898-9.html
克隆与序列化
TreeMap实现了Cloneable接口,即实现了clone()方法。
clone()方法的作用很简单,就是克隆一个TreeMap对象并返回。
- // 克隆一个TreeMap,并返回Object对象
- public Object clone() {
- TreeMap<K,V> clone = null;
- try {
- clone = (TreeMap<K,V>) super.clone();
- } catch (CloneNotSupportedException e) {
- throw new InternalError();
- }
- // Put clone into "virgin" state (except for comparator)
- clone.root = null;
- clone.size = 0;
- clone.modCount = 0;
- clone.entrySet = null;
- clone.navigableKeySet = null;
- clone.descendingMap = null;
- // Initialize clone with our mappings
- try {
- clone.buildFromSorted(size, entrySet().iterator(), null, null);
- } catch (java.io.IOException cannotHappen) {
- } catch (ClassNotFoundException cannotHappen) {
- }
- return clone;
- }
TreeMap实现的Serializable接口
TreeMap实现java.io.Serializable,分别实现了串行读取、写入功能。
串行写入函数是writeObject(),它的作用是将TreeMap的“容量,所有的Entry”都写入到输出流中。
而串行读取函数是readObject(),它的作用是将TreeMap的“容量、所有的Entry”依次读出。
readObject() 和 writeObject() 正好是一对,通过它们,我能实现TreeMap的串行传输。
- // java.io.Serializable的写入函数
- // 将TreeMap的“容量,所有的Entry”都写入到输出流中
- private void writeObject(java.io.ObjectOutputStream s)
- throws java.io.IOException {
- // Write out the Comparator and any hidden stuff
- s.defaultWriteObject();
- // Write out size (number of Mappings)
- s.writeInt(size);
- // Write out keys and values (alternating)
- for (Iterator<Map.Entry<K,V>> i = entrySet().iterator(); i.hasNext(); ) {
- Map.Entry<K,V> e = i.next();
- s.writeObject(e.getKey());
- s.writeObject(e.getValue());
- }
- }
- // java.io.Serializable的读取函数:根据写入方式读出
- // 先将TreeMap的“容量、所有的Entry”依次读出
- private void readObject(final java.io.ObjectInputStream s)
- throws java.io.IOException, ClassNotFoundException {
- // Read in the Comparator and any hidden stuff
- s.defaultReadObject();
- // Read in size
- int size = s.readInt();
- buildFromSorted(size, null, s, null);
- }
说到这里,就顺便说一下“关键字transient”的作用
transient是Java语言的关键字,它被用来表示一个域不是该对象串行化的一部分。
Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。
当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。
0 0
- TreeMap源码分析八
- TreeMap源码分析
- TreeMap源码分析二
- TreeMap源码分析三
- TreeMap源码分析五
- TreeMap源码分析六
- TreeMap源码分析七
- TreeMap源码分析九
- TreeMap源码分析十
- 《Java源码分析》:TreeMap
- 源码分析-TreeMap
- TreeMap源码分析
- TreeMap源码分析
- 《Java源码分析》:TreeMap
- TreeMap源码分析
- TreeMap源码分析
- TreeMap源码分析解读
- TreeMap源码分析
- 用cmake 编译 xcode用的clucene静态库(三)
- sun.misc.unsafe类的使用
- webservice的总结
- vc9 没有pdb文件。
- 重写setTimeout方法实现传参
- TreeMap源码分析八
- ORA-12154: TNS: 无法解析指定的连接标识符 的解决方法
- tomcat项目使用nginx中的图片和文件下载
- 高性能消息系统——Kafka
- Android数据的四种存储方式
- 用vim格式化代码
- 指令集(sse)中PACKAGE 和 SCALAR 关系
- WPF学习第四集-系统的学习XAML语法
- 坐标