对象序列化对象流国际化.ppt

上传人:wuy****n92 文档编号:91543677 上传时间:2023-05-27 格式:PPT 页数:30 大小:312.99KB
返回 下载 相关 举报
对象序列化对象流国际化.ppt_第1页
第1页 / 共30页
对象序列化对象流国际化.ppt_第2页
第2页 / 共30页
点击查看更多>>
资源描述

《对象序列化对象流国际化.ppt》由会员分享,可在线阅读,更多相关《对象序列化对象流国际化.ppt(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、对象序列化的概念对对象象的的持持续续性性可可以以永永久久性性保保存存一一个个对对象象的的状状态态并并在在需需要要时时获获取取该该对对象象的的信信息息(重重新新创创建建一一个个完完全全相相同同的的对象);对象);对对象象序序列列化化通通过过写写出出对对象象的的状状态态数数据据来来记记录录一一个个对对象。象。对对象象序序列列化化的的主主要要任任务务:写写出出对对象象所所有有成成员员变变量量的的值值,包括引用类型成员变量对应的对象的信息。包括引用类型成员变量对应的对象的信息。对象序列化的概念目标:将对象保存到磁盘或者在网络中传递目标:将对象保存到磁盘或者在网络中传递通过对象序列化,可以将对象保存在磁

2、盘或网络中通过对象序列化,可以将对象保存在磁盘或网络中为为了了实实现现对对象象序序列列化化,对对应应的的类类必必须须实实现现下下面面的的两两种种接口之一:接口之一:SerializableSerializableExternalizableExternalizable对象序列化的实现方式 要序列化一个对象,其所属的类必须实现以下两种要序列化一个对象,其所属的类必须实现以下两种 接口之一:接口之一:SerializableSerializable 在流中必须保存有恢复成兼容类型对象所需的各成员在流中必须保存有恢复成兼容类型对象所需的各成员变量的值。变量的值。ExternalizableExter

3、nalizable类自身定义其对象的外部存储格式。类自身定义其对象的外部存储格式。ObjectOutputStream ObjectOutputStream ObjectOutputStream 类提供对象的序列化处写出功能。类提供对象的序列化处写出功能。FileOutputStream f=new FileOutputStream(tmp);FileOutputStream f=new FileOutputStream(tmp);ObjectOutputStream s=new ObjectOutputStream(f);ObjectOutputStream s=new ObjectOutp

4、utStream(f);s.writeObject(Today);s.writeObject(Today);s.writeObject(new Date();s.writeObject(new Date();s.flush();s.flush();writeObjectwriteObject方方法法序序列列化化指指定定的的对对象象,并并遍遍历历该该对对象象对对其其它它对对象象的的引引用用,递递归归的的序序列列化化所所有有被被引引用用到到的的其其它它对对象象,从而建立一个完整的序列化流。从而建立一个完整的序列化流。ObjectInputStream ObjectInputStreamObject

5、InputStream类提供读取序列化对象的功能类提供读取序列化对象的功能FileInputStream in=new FileInputStream(tmp);FileInputStream in=new FileInputStream(tmp);ObjectInputStream s=new ObjectInputStream(in);ObjectInputStream s=new ObjectInputStream(in);String today=(String)s.readObject();String today=(String)s.readObject();Date date=(

6、Date)s.readObject();Date date=(Date)s.readObject();readObjectreadObject方方法法反反序序列列化化输输入入流流中中的的下下一一个个对对象象,遍遍历历该该对对象象中中所所有有对对其其它它对对象象的的引引用用,并并递递归归的的反反序序列列化化这这些引用对象。些引用对象。Serializable 接口接口只是用来标识出一个类接口只是用来标识出一个类 能够被序列化,并未定义任何抽象方法能够被序列化,并未定义任何抽象方法public interface Serializable public interface Serializable

7、 序列化的内容被序列化的内容:被序列化的内容:成员变量(包括基本数据类型、数组、对其它对象成员变量(包括基本数据类型、数组、对其它对象 的引用)的引用)类类 名名不被序列化的内容:不被序列化的内容:static static的属性的属性 方法方法 加了加了transienttransient修饰符的属性修饰符的属性对象序列化举例 1class Name implements Comparable,Serializable private String firstName,lastName;public Name(String f,String l)firstName=f;public Stri

8、ng 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)&(lastName.equals(name.lastName);return sup

9、er.equals(obj);public int hashCode()return 31*firstName.hashCode()+lastName.hashCode();public int compareTo(Object o)Name n=(Name)o;int lastCmp=lastNpareTo(n.lastName);return(lastCmp!=0?lastCmp:firstNpareTo(n.firstName);对象序列化举例 1(续2)import java.io.*;import java.util.*;public class Test public static

10、 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=ne

11、w 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

12、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(ClassNotFo

13、undException e1)e1.printStackTrace();在网络中传递对象建立一个建立一个SocketSocket连接,在这个连接之间传递系列化后连接,在这个连接之间传递系列化后的对象的对象对象序列化举例 2import 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();Object

14、InputStream 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

15、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);定制对象系列化可以通过定制对象系列化改变

16、默认的系列化机制可以通过定制对象系列化改变默认的系列化机制通过在可系列化的类中实现方法通过在可系列化的类中实现方法writeObject(ObjectOutputStream out)writeObject(ObjectOutputStream out)和和readObject(ObjectInputStream in)readObject(ObjectInputStream in),可以实现定制,可以实现定制使用transient关键字保护数据通过在属性前面加上通过在属性前面加上transienttransient关键字,限制属性写入关键字,限制属性写入到文件或网络中到文件或网络中还可以在未

17、实现系列化接口的引用类型属性前面加上还可以在未实现系列化接口的引用类型属性前面加上transienttransient关键字,避免对此类属性进行递归系列化时关键字,避免对此类属性进行递归系列化时出现异常出现异常系列化的另一种方式可以让需要系列化的类实现可以让需要系列化的类实现SerializableSerializable接口的子接口接口的子接口ExternalizableExternalizableExternalizableExternalizable接口表示实现该接口的类在序列化中由该接口表示实现该接口的类在序列化中由该类本身来控制信息的写出和读入。类本身来控制信息的写出和读入。Exte

18、rnalizableExternalizable接口定义:接口定义:package java.io;package java.io;public interface Externalizable extends Serializablepublic interface Externalizable extends Serializablepublic void writeExternal(ObjectOutput out)throws public void writeExternal(ObjectOutput out)throws IOException;IOException;public

19、 void readExternal(ObjectInput in)throws IOException,public void readExternal(ObjectInput in)throws IOException,java.lang.ClassNotFoundException;java.lang.ClassNotFoundException;系列化的另一种方式步骤:步骤:实现实现ExternalizableExternalizable接口接口实现实现readExternal()/writeExternal()readExternal()/writeExternal()方法方法需要一

20、个不带参数的构造器(是否需要显式定义根据类需要一个不带参数的构造器(是否需要显式定义根据类是否有定义构造器而定)是否有定义构造器而定)小结描述对象序列化的目标描述对象序列化的目标编程实现对象序列化编程实现对象序列化了解了解java.iojava.io包中和系列化有关的内容,掌握主要的包中和系列化有关的内容,掌握主要的接口接口编程实现序列化的对象在网络上的传输编程实现序列化的对象在网络上的传输描述对象序列化的原理描述对象序列化的原理transienttransient的用法的用法Serializable/ExternalizableSerializable/Externalizable的异同的异

21、同国际化软件国际化的意义软件国际化的意义如何确定如何确定localelocale数字、货币的国际化数字、货币的国际化日期和时间的国际化日期和时间的国际化使用资源文件使用资源文件使用属性文件使用属性文件消息的国际化消息的国际化确定locale一个一个localelocale包括:国家(地区)以及语言包括:国家(地区)以及语言使用使用LocaleLocale类来表示类来表示Locale(String language)Locale(String language)Locale(String language,String country)Locale(String language,String

22、country)Locale(String language,String country,String Locale(String language,String country,String variant)variant)countrycountry表示有效的表示有效的ISOISO国家代码国家代码VariantVariant是预留给第三方软件开发商或浏览器使用的一个是预留给第三方软件开发商或浏览器使用的一个附加变量附加变量Locale类常用方法:常用方法:getLanguage()getLanguage()getCountry()getCountry()getDisplayLanguag

23、e()getDisplayLanguage()getDisplayCountry()getDisplayCountry()toString()toString():语言:语言_ _国家国家获取默认的localeLocale.getDefault()Locale.getDefault():获取系统默认的:获取系统默认的localelocale和数字相关的格式化NumberFormatNumberFormat类类数字(数字(NumericNumeric):):getNumberInstance()/getNumberInstance(Locale lcl)getNumberInstance()/g

24、etNumberInstance(Locale lcl)货币货币(CurrencyCurrency):):getCurrencyInstance()/getCurrencyInstance(Locale lclgetCurrencyInstance()/getCurrencyInstance(Locale lcl)百分比(百分比(PercentPercent):):getPercentInstance()/getPercentInstance(Locale lcl)getPercentInstance()/getPercentInstance(Locale lcl)日期/时间格式化DateFo

25、rmatDateFormatDateFormat getDateInstance()DateFormat getDateInstance()DateFormat getDateInstance(int dateStyle,Locale lcl)DateFormat getDateInstance(int dateStyle,Locale lcl)DateFormat getTimeFormat()DateFormat getTimeFormat()DateFormat getTimeFormat(int timeStyle,Locale lcl)DateFormat getTimeFormat

26、(int timeStyle,Locale lcl)DateFormat getDateTimeFormat()DateFormat getDateTimeFormat()DateFormat getDateTimeFormat(int dateStyle,int DateFormat getDateTimeFormat(int dateStyle,int timeStyle,Locale lcl)timeStyle,Locale lcl)dateStyle/timeStyledateStyle/timeStyle可以取如下的值:可以取如下的值:DateFormat.DEFAULTDateFo

27、rmat.DEFAULTDateFormat.LONGDateFormat.LONGDateFormat.MEDIUMDateFormat.MEDIUMDateFormat.SHORTDateFormat.SHORTDateFormat.FULLDateFormat.FULL使用SimpleDateFormatSimpleDateFormatSimpleDateFormat简化了日期和时间的格式化简化了日期和时间的格式化它主要用于本地化它主要用于本地化资源包讲信息封装在资源包(讲信息封装在资源包(Resource BundleResource Bundle)中)中在在java.utiljava

28、.util中提供了一个中提供了一个ResouceBundleResouceBundle类,用于表类,用于表示资源包示资源包资源包命名规定:资源包命名规定:XXXResource_language_country_variant/XXXResourcXXXResource_language_country_variant/XXXResource_language_country/XXXResource_language/XXXResoe_language_country/XXXResource_language/XXXResourceurce通过通过ResourceBundleResourceB

29、undle类的类的getBundle(String getBundle(String bundleName,Locale lcl)bundleName,Locale lcl)方法可以取得对应方法可以取得对应localelocale的的资源包资源包得到得到bundlebundle后,使用后,使用ResourceBundleResourceBundle对象的对象的getObject()/getStringgetObject()/getString()()方法可以获得对应的信息方法可以获得对应的信息资源包(con.)我们通常将自己定义的我们通常将自己定义的ResouceBundleResouceBu

30、ndle类继承类继承ListResourceBundleListResourceBundle或者或者PropertyResourceBundlePropertyResourceBundle类,类,然后实现其中的然后实现其中的getContents()getContents()方法方法如果资源中有除如果资源中有除StringString外的其他对象,使用外的其他对象,使用ListResourceBundleListResourceBundle,否则使用,否则使用PropertyResourceBundlePropertyResourceBundle使用属性文件如果只有如果只有StringStri

31、ng类型资源,只需要使用属性文件即可类型资源,只需要使用属性文件即可属性文件的命名和资源包文件类似,并且注意将扩展属性文件的命名和资源包文件类似,并且注意将扩展名命名为名命名为.properties.propertiesResourceBundleResourceBundle的的getBundle()getBundle()方法将会找出对应的属方法将会找出对应的属性文件,并且将它转换成性文件,并且将它转换成PropertyResourceBundlePropertyResourceBundle对对象,我们不需要自己去产生象,我们不需要自己去产生PropertyResourceBundelProp

32、ertyResourceBundel对象对象消息的格式化使用使用MessageFormatMessageFormat来对消息进行格式化来对消息进行格式化将文本消息写成一个字符串,在其中不确定的部分使将文本消息写成一个字符串,在其中不确定的部分使用占位符,在一个字符串中最多可以使用用占位符,在一个字符串中最多可以使用1010个占位符个占位符(0909),每个占位符可以多次使用;),每个占位符可以多次使用;建立一个建立一个MessageFormatMessageFormat对象,将格式字符串作为构造对象,将格式字符串作为构造器的参数;器的参数;使用使用MessageFormatMessageFormat的的setLocale()setLocale()方法设置它的方法设置它的LocaleLocale属性;属性;建立一个用于取代占位符的对象的数组,让占位符中建立一个用于取代占位符的对象的数组,让占位符中的数字和数组的索引匹配;的数字和数组的索引匹配;调用调用MessageFormatMessageFormat的的format()format()方法,将对象数组作为方法,将对象数组作为参数。参数。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁