- 浏览: 328156 次
- 性别:
- 来自: 广州
文章分类
最新评论
本章主要講解怎么樣使用java.beans.Beans類對已經過串行化處理的JavaBean進行解凍處理,在本章會遇到工廠方法模式,標識接口模式和原始模型模式.
一:什么是冷藏和解凍
(1)串行化使得一個程序可以把一個完整的對象寫到一個Byte流里面,或者從一個Byte流里讀出一個事先存儲在里面的完整的對象:串行化可以把Java對象和原始數據類型轉換成一個適合於某種網絡或文件系統的Byte流.
(2)串行化處理的威力:串行處理功能真正強大之處在於一個Java程序不需要直接處理存儲在硬盤上面的原始數據,就可以很容易地將一個Java對象和一個二進制流之間相互轉換(要知道C從硬盤上讀取數據的麻煩,更不用說將二進制流轉換成所需要格式的各種細節的繁瑣),現在java把這些繁瑣都省去了,你只要實現Serializable接口(或它的子接口Externalizable)
二:什么類可以串行化
java.awt.Component實現了Serializable接口,因此所有Component直接的和間接的子類,包括Button,Scrollbar,TextArea,List,Container,Panel,java.applet.Applet以及所有的Applet的子類和Swing的子類,全都是可以串行化的,再比如java.lang.Throwable類也實現了Seralizable接口.因此所有的Exception,Error類均是可以串行化的。
一般而言,Exception,Error以及其他繼承自Throwable的類均是可以串行化的。而流,所有的Reader和Writer以及其他的I/O類均是不可能串行化的;AWT和Swing,容器類,事件類均是可以串行化的;事件適配器類,圖像過濾器類,AWT包中與操作系統相關的我類均是不可以串行化的;原始類型的封裝類中只有Void類是可以串行化的;多數的java.lang包中的類是不可以串行化的;反射(Reflection)類是不可以串行化的;java.math中的類都是可以串行化;壓縮類都是不可以串行化的.
三:什么樣的類不可以串行化
一般而言,滿足下面的四個條件之一的類就不應當串行化:
(1)一個類與本地代碼(native code)有緊密的關系,如java.util.zip.Deflater就是一個例子.
(2)對象的內部狀態依賴於java虛擬機或運行環境,從而每一次運行時這個狀態都有可能不同,比如java.lang.Thread,java.io.InkputStream,java.io.FileDescriptor,java.awt.PrintJob等。
(3)串行化可能帶潛在的安全隱患,比如java.lang.SecurityManager以及java.security.MessageDigest
(4)一個類僅僅是一些靜態方法的存放地,並沒有任何內部狀態,如java.beans.Beans和java.lang.Math
四:一個冷藏的例子
五:怎么樣在JSP中使用Beans.Instantiate方法.(略過)
六:與裝飾模式的關系
在使用串行化或者任何其他的I/O操作的時候,都不可以避免要使用裝飾模式:
ObjectOutputStream對象將FileOutputStream對象包裹起來.....詳細見裝飾模式一章.
一:什么是冷藏和解凍
(1)串行化使得一個程序可以把一個完整的對象寫到一個Byte流里面,或者從一個Byte流里讀出一個事先存儲在里面的完整的對象:串行化可以把Java對象和原始數據類型轉換成一個適合於某種網絡或文件系統的Byte流.
(2)串行化處理的威力:串行處理功能真正強大之處在於一個Java程序不需要直接處理存儲在硬盤上面的原始數據,就可以很容易地將一個Java對象和一個二進制流之間相互轉換(要知道C從硬盤上讀取數據的麻煩,更不用說將二進制流轉換成所需要格式的各種細節的繁瑣),現在java把這些繁瑣都省去了,你只要實現Serializable接口(或它的子接口Externalizable)
二:什么類可以串行化
java.awt.Component實現了Serializable接口,因此所有Component直接的和間接的子類,包括Button,Scrollbar,TextArea,List,Container,Panel,java.applet.Applet以及所有的Applet的子類和Swing的子類,全都是可以串行化的,再比如java.lang.Throwable類也實現了Seralizable接口.因此所有的Exception,Error類均是可以串行化的。
一般而言,Exception,Error以及其他繼承自Throwable的類均是可以串行化的。而流,所有的Reader和Writer以及其他的I/O類均是不可能串行化的;AWT和Swing,容器類,事件類均是可以串行化的;事件適配器類,圖像過濾器類,AWT包中與操作系統相關的我類均是不可以串行化的;原始類型的封裝類中只有Void類是可以串行化的;多數的java.lang包中的類是不可以串行化的;反射(Reflection)類是不可以串行化的;java.math中的類都是可以串行化;壓縮類都是不可以串行化的.
三:什么樣的類不可以串行化
一般而言,滿足下面的四個條件之一的類就不應當串行化:
(1)一個類與本地代碼(native code)有緊密的關系,如java.util.zip.Deflater就是一個例子.
(2)對象的內部狀態依賴於java虛擬機或運行環境,從而每一次運行時這個狀態都有可能不同,比如java.lang.Thread,java.io.InkputStream,java.io.FileDescriptor,java.awt.PrintJob等。
(3)串行化可能帶潛在的安全隱患,比如java.lang.SecurityManager以及java.security.MessageDigest
(4)一個類僅僅是一些靜態方法的存放地,並沒有任何內部狀態,如java.beans.Beans和java.lang.Math
四:一個冷藏的例子
package cai.milenfan.basic.test; import java.awt.*; import java.awt.event.*; import java.io.*; import java.awt.TextField; public class PickleMaker extends Frame{ PickleMaker(String text,int size){ super("Pickle Maker"); //增加一個事件監聽器 addWindowListener(new Win()); setLayout(new FlowLayout()); //創建TextField對象並將它串行化 TextField textField = makeTextField(text,size); serializeTextField(textField,"c:\\mytextfield.ser"); add(textField); } private TextField makeTextField(String text,int size){ TextField textField = new TextField(text,size); return textField; } //串行化TextField private void serializeTextField(TextField textField,String filename){ try { FileOutputStream outStream = new FileOutputStream(filename); ObjectOutputStream out = new ObjectOutputStream(outStream); out.writeObject(textField); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } //這個內部類提供監聽功能,以便在接到操作系統傳來的關閉窗口的事件時,將應用程序結束 class Win extends WindowAdapter{ public void windowClosing(WindowEvent evt){ Frame frame = (Frame)evt.getSource(); frame.setVisible(false); frame.disable(); System.exit(0); } } public static void main(String[] args){ Frame frame = new PickleMaker("No matter where you go,&this.",25); frame.setBounds(0, 0, 400, 300); frame.setVisible(true); } } //在這個類的main()方法被調用時,會創建一個Frame對象,並顯示一個TextField對象,與此同時,這個TextField對象被串行化, //存儲到名為mytextfield.ser的文件里(由於沒有指定路徑,這個文件會被放到包的根路徑上)
package cai.milenfan.basic.test; import java.awt.*; import java.awt.event.*; import java.io.*; import java.awt.TextField; import java.beans.Beans; public class ShowPickle extends Frame{ ShowPickle(String serComponent){ super("Show Pickle"); addWindowListener(new Win()); setLayout(new FlowLayout()); TextField text; try{ text = (TextField)Beans.instantiate(null, serComponent); }catch(Exception e){ text = new TextField(); } add(text); } class Win extends WindowAdapter{ public void windowClosing(WindowEvent evt){ Frame frame = (Frame)evt.getSource(); frame.setVisible(false); frame.disable(); System.exit(0); } } public static void main(String[] args){ Frame frame = new ShowPickle("c:/mytextfield"); frame.pack(); frame.setVisible(true); } }
五:怎么樣在JSP中使用Beans.Instantiate方法.(略過)
六:與裝飾模式的關系
在使用串行化或者任何其他的I/O操作的時候,都不可以避免要使用裝飾模式:
ObjectOutputStream對象將FileOutputStream對象包裹起來.....詳細見裝飾模式一章.
发表评论
-
Mina重连
2014-05-26 21:29 2865import com.sun.swing.internal. ... -
面试经典
2014-05-24 09:29 6081.mysql innodb引擎,什么叫聚集索引,与非聚集索 ... -
一拍网网站系统架构图
2014-03-28 21:24 539一拍网网站系统架构图 -
Window下安装配置nginx
2013-08-12 16:53 736安装:http://www.cnblogs.com/wen ... -
使用线程池的好处
2013-07-18 14:41 1143使用线程池有两个好处: 1.可以创建和销毁线程所带来的系统 ... -
Java ThreadLocal使用浅析
2013-07-18 14:36 415ThreadLocal通过在其内部保存变量的副本,并且各个副本 ... -
MyBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多
2013-07-05 13:06 1091http://blog.csdn.net/zhangwei ... -
分享一位网友的架构杂谈
2013-05-20 23:16 873不容类型的网站,并发处理不一样,例如针对sns这种类型的网站 ... -
JSP页面静态化
2013-04-08 09:20 805http://www.java-zone.org/644.ht ... -
Java compile to C++
2013-03-19 14:53 464http://code.google.com/a/eclips ... -
几个TCP Socket的通信框架
2013-03-19 12:26 947http://www.oschina.net/p/simple ... -
宝贝鱼
2013-03-18 23:54 638http://code.google.com/p/cshbbr ... -
将Java程序注册成系统服务(NT服务)
2013-03-16 16:14 571http://blog.csdn.net/small____f ... -
Java内存回收机制
2013-03-13 15:47 782http://www.iteye.com/blogs/tag/ ... -
支付宝,百付宝集成
2013-03-13 14:01 898http://help.alipay.com/support/ ... -
SSH+EXTJS项目下载
2013-03-11 23:02 387http://download.csdn.net/tag/Ex ... -
Hibernate中使用Threadlocal创建线程安全的Session
2013-03-04 20:39 490http://blog.sina.com.cn/s/blog_ ... -
Java Socket多线程通信
2012-10-09 09:53 811当Server没接受到一个Client连接请求之后,都把处理流 ... -
Java 多线程的一个例子
2012-10-09 09:48 984目录: 1 synchronized的 ... -
app引擎
2012-07-10 09:39 0http://sae.sina.com.cn/ htt ...
相关推荐
1:模式的简史和形而上学;2:统一建模语言UML简介;3:软件的可维护性与可复用性;...21:javabean冷藏和解冻;22:适配器模式;23:缺省适配器模式;24:合成模式;25:装饰模式;26:设计模式在JAVA I/O设计原则;28:代理模式;....
登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+...
javabean概念和使用,介绍javabean的基本概念,使用以及一些实际例子。
两种模式{(JSP+JavaBean)和(JSP+JavaBean+servlet)}简单实现机票预订
简易通过的java和javabean互换
JavaBean 和 JSP 中的标准动作学习
在JSP页面中,我们通过使用隐式...JavaBean就是放置在JSP服务器后台的一个封装了数据和方法的类。JSP通过JavaBean直接调用里面的方法,实现操作的目的。 JSP JavaBean的组合,是小型项目中最常见的开发模式。 ......
提供json转javabean和javabean转json的方法
一个基于JAVABEAN的BBS系统!
JavaBean简介 什么是JavaBean? JavaBean的三个组成部分 JavaBean的基本特征 BeanInfo接口 JavaBean的开发模式 使用JavaBean开发应用程序 EJB简介
实现javabean转换xml,以及xml转换javabean,,尤其是做数据对接时,使用webservice时,很方便
在本实例中分别创建了保存商品信息的JavaBean---GoodsSingle和工具JavaBean---MyTools和实现购物车的JavaBean---ShopCar。
利用Javabean、servlet、jsp实现用户添加、修改、删除
JavaBean和JSP中的标准动作 分析JavaBean和JSP中遇到的各种问题
Servlet+JSP+JavaBean(MVC)模式适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据。 Servlet+JSP、JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此...
Javabean写入文件,文件读出为Javabean
JavaBean和JSP中的标准动作 学习笔记
JavaBean 和 Server Bean(通常称为 Enterprise JavaBean (EJB))有一些基本相同之处。它们都是用一组特性创建,以执行其特定任务的对象或组件。它们还有从当前所驻留服务器上的容器获得其它特性的能力。这使得 ...
根据数据表结构自动生成javabean,需JDK1.7以上版本
自动生成Javabean的Excel工具