- 浏览: 341300 次
- 性别:
- 来自: 广州
文章分类
最新评论
本章主要講解怎么樣使用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 2927import com.sun.swing.internal. ... -
面试经典
2014-05-24 09:29 6431.mysql innodb引擎,什么叫聚集索引,与非聚集索 ... -
一拍网网站系统架构图
2014-03-28 21:24 623一拍网网站系统架构图 -
Window下安装配置nginx
2013-08-12 16:53 809安装:http://www.cnblogs.com/wen ... -
使用线程池的好处
2013-07-18 14:41 1252使用线程池有两个好处: 1.可以创建和销毁线程所带来的系统 ... -
Java ThreadLocal使用浅析
2013-07-18 14:36 483ThreadLocal通过在其内部保存变量的副本,并且各个副本 ... -
MyBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多
2013-07-05 13:06 1177http://blog.csdn.net/zhangwei ... -
分享一位网友的架构杂谈
2013-05-20 23:16 913不容类型的网站,并发处理不一样,例如针对sns这种类型的网站 ... -
JSP页面静态化
2013-04-08 09:20 890http://www.java-zone.org/644.ht ... -
Java compile to C++
2013-03-19 14:53 507http://code.google.com/a/eclips ... -
几个TCP Socket的通信框架
2013-03-19 12:26 996http://www.oschina.net/p/simple ... -
宝贝鱼
2013-03-18 23:54 692http://code.google.com/p/cshbbr ... -
将Java程序注册成系统服务(NT服务)
2013-03-16 16:14 604http://blog.csdn.net/small____f ... -
Java内存回收机制
2013-03-13 15:47 814http://www.iteye.com/blogs/tag/ ... -
支付宝,百付宝集成
2013-03-13 14:01 975http://help.alipay.com/support/ ... -
SSH+EXTJS项目下载
2013-03-11 23:02 437http://download.csdn.net/tag/Ex ... -
Hibernate中使用Threadlocal创建线程安全的Session
2013-03-04 20:39 592http://blog.sina.com.cn/s/blog_ ... -
Java Socket多线程通信
2012-10-09 09:53 839当Server没接受到一个Client连接请求之后,都把处理流 ... -
Java 多线程的一个例子
2012-10-09 09:48 1024目录: 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:代理模式;....
JavaBean 概念和使用 JavaBean 是一种 JAVA 语言写成的可重用组件。为写成 JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。...
登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+...
JavaBean遵循特定的规范,使它们能够被其他Java应用或开发工具(如IDEs)识别、可视化和操作。JavaBean的主要目标是提供组件重用,简化开发过程,并促进软件的模块化。 标题"JAVABEAN"指的是这个项目或系统是基于...
JavaBean和XML之间的转换在软件开发中扮演着重要的角色,特别是在数据交换和接口通信中。当我们需要在不同的系统之间传递信息时,XML由于其结构化和可读性,经常被用作数据传输的标准格式。然而,JavaBean是Java中...
JavaBean是Java编程中的一种组件模型,主要用于封装数据和业务逻辑,便于在多个Java应用程序中重用。在本示例中,“JavaBean创建和使用:计算器”是一个关于如何构建和运用JavaBean来实现一个简单的计算器功能的教学...
这里我们关注的是使用JSP(JavaServer Pages)结合JavaBean和Servlet实现的两种开发模式。以下是这两种模式的详细解释: 1. JSP+JavaBean模式: 这种模式中,JSP主要负责展示用户界面,JavaBean则作为业务逻辑层。...
在 J2EE 系统中, JavaBean 通常用来封装业务逻辑和数据,实现业务逻辑和数据展示的分离,使系统更健壮和灵活。 在本设计中,我们使用 JavaBean 来封装用户名和学号的验证逻辑,使用 jsp+html 来实现显示设计。具体...
JavaBean是Java编程中的一种重要概念,主要用于封装数据和业务逻辑,它遵循一定的规范,使得Java对象能够被方便地在Web应用中使用,特别是在Servlet和JSP之间传递数据。在这个项目"JavaBean_Javabean增删改查_...
这个"JavaBean示例"旨在帮助初学者理解和使用JavaBean。JavaBean主要用于构建Java应用程序的可重用组件,特别是在JavaServer Pages (JSP) 和Enterprise JavaBeans (EJB) 中,它们作为数据容器来传递信息。 JavaBean...
在Java开发中,JavaBean和JSON之间的转换是一个常见的任务,特别是在进行Web服务或者前后端交互时。JavaBean是Java中的一个对象模型,用于封装数据,而JSON(JavaScript Object Notation)则是一种轻量级的数据交换...
JavaBean 和 JSP 中的标准动作学习
JavaBean是一种特殊的Java类,它遵循JavaBean的命名约定和设计模式,主要用于封装和 Exposure 数据。JavaBean技术广泛应用于Web应用开发,特别是在购物车系统中,JavaBean技术可以用来封装商品信息、实现购物车逻辑...
JavaBean和XML是Java开发中常见的数据表示形式。JavaBean是一种符合特定规范的Java类,通常用于封装数据和业务逻辑,而XML(eXtensible Markup Language)则是一种用于存储和传输结构化数据的标记语言。在实际项目中...
JavaBean是一种特殊的Java类,主要用于封装数据和业务逻辑,它遵循特定的设计规范,方便在Java应用程序或Web应用中进行数据交换和组件重用。在这个"javabean留言小项目"中,我们可以深入理解JavaBean的基本概念、...
在传统的Web开发中,JavaBean 作为数据层,负责存储和处理应用程序中的数据,同时提供公共方法来访问和修改这些数据。 JavaBean 的主要特征包括: 1. **类定义**:JavaBean 必须是一个公共类(`public class`),...
JavaBean技术是Java Web开发中的一个重要组成部分,它主要用于封装数据和业务逻辑,使得代码更加模块化,便于重用和管理。在"WEB应用技术 JavaBean技术应用"的实验中,我们学习了如何利用JavaBean来处理用户登录的...
总的来说,`javabean(DB)`指的是一个与数据库操作相关的JavaBean组件,它可能包含一系列用于数据库交互的方法和属性,是Java应用中数据持久化和业务处理的关键部分。在实际项目中,我们需要根据具体需求来设计和使用...
这个“JavaBean课件.rar”压缩包文件显然包含了与JavaBean相关的教学材料,可能是PDF文档、PPT演示文稿、源代码示例或其他教育资源,用于帮助学习者理解和掌握JavaBean的概念和技术。 JavaBean是一种Java类,符合...
JavaBean是一种特殊的Java类,它遵循一定的规范,用于封装...这个名为“javabean”的压缩包文件,很可能是为了帮助你学习和实践JavaBean的编写和使用,通过阅读和分析其中的源码,你可以进一步深化对JavaBean的理解。