对象序列化对象流国际化课件

上传人:磨石 文档编号:240741262 上传时间:2024-05-04 格式:PPT 页数:30 大小:217.50KB
返回 下载 相关 举报
对象序列化对象流国际化课件_第1页
第1页 / 共30页
对象序列化对象流国际化课件_第2页
第2页 / 共30页
对象序列化对象流国际化课件_第3页
第3页 / 共30页
点击查看更多>>
资源描述
对象序列化的概念对象象的的持持续性性可可以以永永久久性性保保存存一一个个对象象的的状状态并并在在需需要要时获取取该对象象的的信信息息(重重新新创建建一一个个完完全全相相同同的的对象);象);对象象序序列列化化通通过写写出出对象象的的状状态数数据据来来记录一一个个对象。象。对象象序序列列化化的的主主要要任任务:写写出出对象象所所有有成成员变量量的的值,包括引用包括引用类型成型成员变量量对应的的对象的信息。象的信息。对象序列化对象流国际化对象序列化的概念目目标:将:将对象保存到磁象保存到磁盘或者在网或者在网络中中传递通通过对象序列化,可以将象序列化,可以将对象保存在磁象保存在磁盘或网或网络中中为了了实现对象象序序列列化化,对应的的类必必须实现下下面面的的两两种种接口之一:接口之一:SerializableExternalizable对象序列化对象流国际化对象序列化的实现方式要序列化一个要序列化一个对象,其所属的象,其所属的类必必须实现以下两种以下两种接口之一:接口之一:Serializable 在流中必在流中必须保存有恢复成兼容保存有恢复成兼容类型型对象所需的各成象所需的各成员变量的量的值。Externalizable类自身定自身定义其其对象的外部存象的外部存储格式。格式。对象序列化对象流国际化ObjectOutputStream ObjectOutputStream 类提供提供对象的序列化象的序列化处写出功能。写出功能。f=new(tmp);ObjectOutputStream s=new ObjectOutputStream(f);s.writeObject(Today);s.writeObject(new Date();s.flush();writeObject方方法法序序列列化化指指定定的的对象象,并并遍遍历该对象象对其其它它对象象的的引引用用,递归的的序序列列化化所所有有被被引引用用到到的的其其它它对象象,从而建立一个完整的序列化流。从而建立一个完整的序列化流。对象序列化对象流国际化ObjectInputStream ObjectInputStream类提供提供读取序列化取序列化对象的功能象的功能 in=new(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修修饰符的属性符的属性对象序列化对象流国际化对象序列化举例1class 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)&(lastName.equals(name.lastName);return super.equals(obj);public int hashCode()return 31*firstName.hashCode()+lastName.hashCode();public int compareTo(Object o)Name n=(Name)o;int lastCmp=pareTo(n.lastName);return(lastCmp!=0?lastCmp:pareTo(n.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 fos=new (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 fis=new (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(e1)e1.printStackTrace();catch(IOException e1)e1.printStackTrace();catch(ClassNotFoundException e1)e1.printStackTrace();对象序列化对象流国际化在网络中传递对象建立一个建立一个Socket连接,在接,在这个个连接之接之间传递系列化后系列化后的的对象象对象序列化对象流国际化对象序列化举例2import java.io.*;impor.*;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.*;impor.*;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接口的子接口接口的子接口ExternalizableExternalizable接口表示接口表示实现该接口的接口的类在序列化中由在序列化中由该类本身来控制信息的写出和本身来控制信息的写出和读入。入。Externalizable接口定接口定义:package java.io;public interface Externalizable extends Serializablepublic 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():语言言_国家国家对象序列化对象流国际化获取默认的localeLocale.getDefault():获取系取系统默默认的的locale对象序列化对象流国际化和数字相关的格式化NumberFormat类数字(数字(Numeric):):getNumberInstance()/getNumberInstance(Locale lcl)货币(Currency):):getCurrencyInstance()/getCurrencyInstance(Locale lcl)百分比(百分比(Percent):):getPercentInstance()/getPercentInstance(Locale lcl)对象序列化对象流国际化日期/时间格式化DateFormatDateFormat 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.DEFAULTDateFormat.LONGDateFormat.MEDIUMDateFormat.SHORTDateFormat.FULL对象序列化对象流国际化使用SimpleDateFormatSimpleDateFormat简化了日期和化了日期和时间的格式化的格式化它主要用于本地化它主要用于本地化对象序列化对象流国际化资源包讲信息封装在信息封装在资源包(源包(Resource Bundle)中)中在在java.util中提供了一个中提供了一个ResouceBundle类,用于表,用于表示示资源包源包资源包命名源包命名规定:定:XXXResource_language_country_variant/XXXResource_language_country/XXXResource_language/XXXResource通通过ResourceBundle类的的getBundle(String bundleName,Locale lcl)方法可以取得方法可以取得对应locale的的资源包源包得到得到bundle后,使用后,使用ResourceBundle对象的象的getObject()/getString()方法可以方法可以获得得对应的信息的信息对象序列化对象流国际化资源包(con.)我我们通常将自己定通常将自己定义的的ResouceBundle类继承承ListResourceBundle或者或者PropertyResourceBundle类,然后,然后实现其中的其中的getContents()方法方法如果如果资源中有除源中有除String外的其他外的其他对象,使用象,使用ListResourceBundle,否,否则使用使用PropertyResourceBundle对象序列化对象流国际化使用属性文件如果只有如果只有String类型型资源,只需要使用属性文件即可源,只需要使用属性文件即可属性文件的命名和属性文件的命名和资源包文件源包文件类似,并且注意将似,并且注意将扩展展名命名名命名为.propertiesResourceBundle的的getBundle()方法将会找出方法将会找出对应的的属性文件,并且将它属性文件,并且将它转换成成PropertyResourceBundle对象,我象,我们不需要自己去不需要自己去产生生PropertyResourceBundel对象象对象序列化对象流国际化消息的格式化使用使用MessageFormat来来对消息消息进行格式化行格式化将文本消息写成一个字符串,在其中不确定的部分使将文本消息写成一个字符串,在其中不确定的部分使用占位符,在一个字符串中最多可以使用用占位符,在一个字符串中最多可以使用10个占位符个占位符(09),每个占位符可以多次使用;),每个占位符可以多次使用;建立一个建立一个MessageFormat对象,将格式字符串作象,将格式字符串作为构造器的参数;构造器的参数;使用使用MessageFormat的的setLocale()方法方法设置它的置它的Locale属性;属性;建立一个用于取代占位符的建立一个用于取代占位符的对象的数象的数组,让占位符中占位符中的数字和数的数字和数组的索引匹配;的索引匹配;调用用MessageFormat的的format()方法,将方法,将对象数象数组作作为参数。参数。对象序列化对象流国际化
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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