




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
对象序列化的概念,对象的持续性可以永久性保存一个对象的状态并在需要时获取该对象的信息(重新创建一个完全相同的对象); 对象序列化通过写出对象的状态数据来记录一个对象。 对象序列化的主要任务:写出对象所有成员变量的值,包括引用类型成员变量对应的对象的信息。,对象序列化的概念,目标:将对象保存到磁盘或者在网络中传递 通过对象序列化,可以将对象保存在磁盘或网络中 为了实现对象序列化,对应的类必须实现下面的两种接口之一: Serializable Externalizable,对象序列化的实现方式,要序列化一个对象,其所属的类必须实现以下两种 接口之一: Serializable 在流中必须保存有恢复成兼容类型对象所需的各成员变量的值。 Externalizable 类自身定义其对象的外部存储格式。,ObjectOutputStream,ObjectOutputStream 类提供对象的序列化处写出功能。 FileOutputStream f = new FileOutputStream(“tmp“); ObjectOutputStream s = new ObjectOutputStream(f); s.writeObject(“Today“); s.writeObject(new Date(); s.flush(); writeObject方法序列化指定的对象,并遍历该对象对其它对象的引用,递归的序列化所有被引用到的其它对象,从而建立一个完整的序列化流。,ObjectInputStream,ObjectInputStream类提供读取序列化对象的功能 FileInputStream in = new FileInputStream(“tmp“); ObjectInputStream s =new ObjectInputStream(in); String today = (String)s.readObject(); Date date = (Date)s.readObject(); readObject方法反序列化输入流中的下一个对象,遍历该对象中所有对其它对象的引用,并递归的反序列化这些引用对象。,Serializable 接口,Java.io.Serializable接口只是用来标识出一个类 能够被序列化,并未定义任何抽象方法 public interface Serializable ,序列化的内容,被序列化的内容: 成员变量(包括基本数据类型、数组、对其它对象 的引用) 类 名 不被序列化的内容: static的属性 方法 加了transient修饰符的属性,对象序列化举例 1,class Name implements Comparable, Serializable private String firstName, lastName; public Name(String f, String l) firstName = f; public String getFirstName() return firstName; public String getLastName() return lastName; public String toString() return firstName + “.“ + lastName; ,对象序列化举例 1(续1),public boolean equals(Object obj) if (obj instanceof Name) Name name = (Name) obj; return (firstName.equals(name.firstName) ,对象序列化举例 1(续2),import java.io.*; import java.util.*; public class Test public static void main(String args) List nameList = new ArrayList(); nameList.add(new Name(“A“,“C“); nameList.add(new Name(“B“,“B“); nameList.add(new Name(“C“,“A“); nameList.add(new Name(“D“,“A“); nameList.add(new Name(“E“,“B“); System.out.println(nameList); Collections.sort(nameList); System.out.println(nameList); try FileOutputStream fos = new FileOutputStream(“d:namelist.obj“); ObjectOutputStream oos = new ObjectOutputStream(fos); System.out.println(“save object.“); oos.writeObject(nameList); catch (IOException e) e.printStackTrace(); System.exit(-1); ,对象序列化举例 1(续3),try FileInputStream fis = new FileInputStream(“d:namelist.obj“); ObjectInputStream ois = new ObjectInputStream(fis); System.out.println(“loading object.“); List arrayList = (ArrayList)ois.readObject(); System.out.println(nameList); Collections.shuffle(nameList); System.out.println(nameList); catch (FileNotFoundException e1) e1.printStackTrace(); catch (IOException e1) e1.printStackTrace(); catch (ClassNotFoundException e1) e1.printStackTrace(); ,在网络中传递对象,建立一个Socket连接,在这个连接之间传递系列化后的对象,对象序列化举例 2,import java.io.*; import .*; import java.util.Date; public class Server public static void main(String args) try ServerSocket server = new ServerSocket(6888); Socket socket = server.accept(); ObjectInputStream ois = new ObjectInputStream (socket.getInputStream(); Name name = (Name)ois.readObject(); Date date = (Date)ois.readObject(); socket.close(); System.out.println(date); System.out.println(name); catch (Exception e) e.printStackTrace(); ,对象序列化举例 2(续),import java.io.*; import .*; import java.util.Date; public class Client public static void main(String args) try Socket socket = new Socket(“localhost“, 8020); ObjectOutputStream oos = new ObjectOutputStream (socket.getOutputStream(); oos.writeObject(new Name(“A“,“B“); oos.writeObject(new Date(); oos.flush(); oos.close(); catch (Exception e) System.exit(1); ,定制对象系列化,可以通过定制对象系列化改变默认的系列化机制 通过在可系列化的类中实现方法writeObject(ObjectOutputStream out)和readObject(ObjectInputStream in),可以实现定制,使用transient关键字保护数据,通过在属性前面加上transient关键字,限制属性写入到文件或网络中 还可以在未实现系列化接口的引用类型属性前面加上transient关键字,避免对此类属性进行递归系列化时出现java.io.NotSerializableException异常,系列化的另一种方式,可以让需要系列化的类实现Serializable接口的子接口Externalizable Externalizable接口表示实现该接口的类在序列化中由该类本身来控制信息的写出和读入。 Externalizable接口定义: package java.io; public interface Externalizable extends Serializable public void writeExternal(ObjectOutput out) throws IOException; public void readExternal(ObjectInput in) throws IOException, java.lang.ClassNotFoundException; ,系列化的另一种方式,步骤: 实现Externalizable接口 实现readExternal()/writeExternal()方法 需要一个不带参数的构造器(是否需要显式定义根据类是否有定义构造器而定),小结,描述对象序列化的目标 编程实现对象序列化 了解java.io包中和系列化有关的内容,掌握主要的接口 编程实现序列化的对象在网络上的传输 描述对象序列化的原理 transient的用法 Serializable/Externalizable的异同,国际化,软件国际化的意义 如何确定locale 数字、货币的国际化 日期和时间的国际化 使用资源文件 使用属性文件 消息的国际化,确定locale,一个locale包括:国家(地区)以及语言 使用Locale类来表示 Locale(String language) Locale(String language,String country) Locale(String language,String country,String variant) country表示有效的ISO国家代码 Variant是预留给第三方软件开发商或浏览器使用的一个附加变量,Locale类,常用方法: getLanguage() getCountry() getDisplayLanguage() getDisplayCountry() toString():语言_国家,获取默认的locale,Locale.getDefault():获取系统默认的locale,和数字相关的格式化,NumberFormat类 数字(Numeric):getNumberInstance()/getNumberInstance(Locale lcl) 货币(Currency):getCurrencyInstance()/getCurrencyInstance(Locale lcl) 百分比(Percent):getPercentInstance()/getPercentInstance(Locale lcl),日期/时间格式化,DateFormat DateFormat getDateInstance() DateFormat getDateInstance(int dateStyle,Locale lcl) DateFormat getTimeFormat() DateFormat getTimeFormat(int timeStyle,Locale lcl) DateFormat getDateTimeFormat() DateFormat getDateTimeFormat(int dateStyle,int timeStyle,Locale lcl) dateStyle/timeStyle可以取如下的值: DateFormat.DEFAULT DateFormat.LONG DateFormat.MEDIUM DateFormat.SHORT DateFormat.FULL,使用SimpleDateFormat,SimpleDateFormat简化了日期和时间的格式化 它主要用于本地化,资源包,讲信息封装在资源包(Resource Bundle)中 在java.util中提供了一个ResouceBundle类,用于表示资源包 资源包命名规定:XXXResource_language_country_variant/XXXResource_language_country/XXXResource_language/XXXResource 通过ResourceBundle类的getBundle(String bundleName,Locale lcl)方法可以取得对应locale的资源包 得到bundle后,使用ResourceBundle对象
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 药学专业的伦理与法律考量试题及答案
- 护理职业生涯执业阻碍研究试题及答案
- 血管健康考试题及答案
- 新高考情景化试题及答案
- 护理服务质量评价相关知识试题及答案
- 环境改善与母猪护理试题及答案
- 电厂审计面试题及答案
- 激光照射工艺的参数调整试题及答案
- 药剂风险管理策略试题及答案
- 卫生管理公共健康考题及答案
- 路灯安装工程项目实施重点、难点和解决方案
- 裁纸机项目质量管理方案
- 建筑工程材料测试题含答案
- 《虹桥机场旅客服务质量提升对策探究》6100字(论文)
- 丰子恺课件教学课件
- 让每一个闪光在每一天成长-四年级期中家长会 课件
- 2024下半年软考信息安全工程师考试真题-及答案-打印
- 中华人民共和国能源法
- 《义务教育数学课程标准(2022年版)》初中内容解读
- 跟骨骨折护理查房课件
- 汉语口语速成第七课课件
评论
0/150
提交评论