




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 6728-2025结构用冷弯型钢
- 【正版授权】 ISO 4898:2025 EN Rigid cellular plastics - Thermal insulation products for buildings - Specifications
- 2025江西吉安市七叶荆文化旅游有限公司招聘安排模拟试卷有完整答案详解
- 2025年福建省泉州市华侨大学招标与采购管理中心招聘1人考前自测高频考点模拟试题及答案详解(新)
- 2025江苏南京交通职业技术学院招聘12人考前自测高频考点模拟试题及答案详解(网校专用)
- 2025年甘肃农业大学招聘博士专职辅导员16人考前自测高频考点模拟试题及1套完整答案详解
- Brand KPIs for clean beauty Dr.Hauschka in Germany-外文版培训课件(2025.9)
- 2025年福建省莆田市度尾镇向社会招聘1人模拟试卷及答案详解参考
- 2025北京中医药大学东方医院枣庄医院招聘备案制人员59人(山东)模拟试卷及答案详解(易错题)
- 2025广西职业技术学院博士人才专项招聘64人模拟试卷参考答案详解
- 2025年全国保密教育线上培训考试试题库附答案【考试直接用】含答案详解
- 2025年度全国普通话水平测试20套复习题库及答案
- 2025年初级会计师考试真题试题及答案
- 上海嘉定区区属国有企业招聘考试真题2024
- 2025心肺复苏术课件
- T-CECS 10400-2024 固废基胶凝材料
- 2025年内蒙古三新铁路有限责任公司招聘笔试参考题库含答案解析
- 初中竞选安全部部长
- 《人体的经络》课件
- 《福禄贝尔》课件
- 期中测试卷(第一单元至第四单元)-2024-2025学年六年级上册数学人教版
评论
0/150
提交评论