`

JavaBean的冷藏和解冻

阅读更多
本章主要講解怎么樣使用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

四:一個冷藏的例子
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對象包裹起來.....詳細見裝飾模式一章.
分享到:
评论

相关推荐

    java与模式

    1:模式的简史和形而上学;2:统一建模语言UML简介;3:软件的可维护性与可复用性;...21:javabean冷藏和解冻;22:适配器模式;23:缺省适配器模式;24:合成模式;25:装饰模式;26:设计模式在JAVA I/O设计原则;28:代理模式;....

    javabean概念和使用

    JavaBean 概念和使用 JavaBean 是一种 JAVA 语言写成的可重用组件。为写成 JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。...

    登录和注册的jsp页面+servlet+javaBean

    登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+servlet+javaBean登录和注册的jsp页面+...

    JAVABEAN

    JavaBean遵循特定的规范,使它们能够被其他Java应用或开发工具(如IDEs)识别、可视化和操作。JavaBean的主要目标是提供组件重用,简化开发过程,并促进软件的模块化。 标题"JAVABEAN"指的是这个项目或系统是基于...

    javabean和xml互相转换工具类以及jar包

    JavaBean和XML之间的转换在软件开发中扮演着重要的角色,特别是在数据交换和接口通信中。当我们需要在不同的系统之间传递信息时,XML由于其结构化和可读性,经常被用作数据传输的标准格式。然而,JavaBean是Java中...

    JavaBean创建和使用:计算器

    JavaBean是Java编程中的一种组件模型,主要用于封装数据和业务逻辑,便于在多个Java应用程序中重用。在本示例中,“JavaBean创建和使用:计算器”是一个关于如何构建和运用JavaBean来实现一个简单的计算器功能的教学...

    机票预订{(JSP+JavaBean)和(JSP+JavaBean+servlet)}

    这里我们关注的是使用JSP(JavaServer Pages)结合JavaBean和Servlet实现的两种开发模式。以下是这两种模式的详细解释: 1. JSP+JavaBean模式: 这种模式中,JSP主要负责展示用户界面,JavaBean则作为业务逻辑层。...

    简单身份验证JAVABEAN的设计

    在 J2EE 系统中, JavaBean 通常用来封装业务逻辑和数据,实现业务逻辑和数据展示的分离,使系统更健壮和灵活。 在本设计中,我们使用 JavaBean 来封装用户名和学号的验证逻辑,使用 jsp+html 来实现显示设计。具体...

    JavaBean_Javabean增删改查_audiencevu9_

    JavaBean是Java编程中的一种重要概念,主要用于封装数据和业务逻辑,它遵循一定的规范,使得Java对象能够被方便地在Web应用中使用,特别是在Servlet和JSP之间传递数据。在这个项目"JavaBean_Javabean增删改查_...

    JavaBean示例

    这个"JavaBean示例"旨在帮助初学者理解和使用JavaBean。JavaBean主要用于构建Java应用程序的可重用组件,特别是在JavaServer Pages (JSP) 和Enterprise JavaBeans (EJB) 中,它们作为数据容器来传递信息。 JavaBean...

    javabean和json转换_javabean2json_

    在Java开发中,JavaBean和JSON之间的转换是一个常见的任务,特别是在进行Web服务或者前后端交互时。JavaBean是Java中的一个对象模型,用于封装数据,而JSON(JavaScript Object Notation)则是一种轻量级的数据交换...

    JavaBean 和 JSP 中 的标准动作

    JavaBean 和 JSP 中的标准动作学习

    JavaBean技术应用实现购物车

    JavaBean是一种特殊的Java类,它遵循JavaBean的命名约定和设计模式,主要用于封装和 Exposure 数据。JavaBean技术广泛应用于Web应用开发,特别是在购物车系统中,JavaBean技术可以用来封装商品信息、实现购物车逻辑...

    javabean和xml互转详细文档+例子

    JavaBean和XML是Java开发中常见的数据表示形式。JavaBean是一种符合特定规范的Java类,通常用于封装数据和业务逻辑,而XML(eXtensible Markup Language)则是一种用于存储和传输结构化数据的标记语言。在实际项目中...

    javabean留言小项目

    JavaBean是一种特殊的Java类,主要用于封装数据和业务逻辑,它遵循特定的设计规范,方便在Java应用程序或Web应用中进行数据交换和组件重用。在这个"javabean留言小项目"中,我们可以深入理解JavaBean的基本概念、...

    javaBean简介.doc

    在传统的Web开发中,JavaBean 作为数据层,负责存储和处理应用程序中的数据,同时提供公共方法来访问和修改这些数据。 JavaBean 的主要特征包括: 1. **类定义**:JavaBean 必须是一个公共类(`public class`),...

    WEB应用技术 JavaBean技术应用

    JavaBean技术是Java Web开发中的一个重要组成部分,它主要用于封装数据和业务逻辑,使得代码更加模块化,便于重用和管理。在"WEB应用技术 JavaBean技术应用"的实验中,我们学习了如何利用JavaBean来处理用户登录的...

    javabean(DB)

    总的来说,`javabean(DB)`指的是一个与数据库操作相关的JavaBean组件,它可能包含一系列用于数据库交互的方法和属性,是Java应用中数据持久化和业务处理的关键部分。在实际项目中,我们需要根据具体需求来设计和使用...

    JavaBean课件.rar

    这个“JavaBean课件.rar”压缩包文件显然包含了与JavaBean相关的教学材料,可能是PDF文档、PPT演示文稿、源代码示例或其他教育资源,用于帮助学习者理解和掌握JavaBean的概念和技术。 JavaBean是一种Java类,符合...

    javabean源码

    JavaBean是一种特殊的Java类,它遵循一定的规范,用于封装...这个名为“javabean”的压缩包文件,很可能是为了帮助你学习和实践JavaBean的编写和使用,通过阅读和分析其中的源码,你可以进一步深化对JavaBean的理解。

Global site tag (gtag.js) - Google Analytics