知识大全 通过E-mail 共享Java 对象
Posted 函数
篇首语:大道之行,天下为公。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 通过E-mail 共享Java 对象相关的知识,希望对你有一定的参考价值。
通过E-mail 共享Java 对象 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
JDK 的新功能 序列化接口(Serializableinterface) 简化了对象持久化(Persistence)的实现 以下介绍如何通过SMTPE mail将对象传送给另一个用户 摘要 一些应用程序需要以一种非实时的方式(例如旅行指南 错误报告(bugreport) 时间表(timesheet)等)和其余用户共享对象 Java语言开发工具包(JDK) 版提供了一 个重要的功能:java io Serializable接口 该技术能让你知道如何序列化一个对象 然 后用e mail传给其它用户 对象持久化和用户间对象共享是许多商业解决方案的基础 例如 一个公司可以用从本公司网址启动的Applet来完成一个时间表的制作 同样该公司也可以提供象具有开支报告 旅行指 南 错误报告(bugreport)等功能的Applet 在这些情况下 从Applet的使用者获得的数据需要和负责薪水 付款 旅行房间预订的人们共享 执行这些职能的人们可能分布在不同的 城市和国家 可能工作在不同的时区 不能希望每个工作人员都能象猫头鹰一样在晚上工作以填写这样的表格 相同的信息也不应该重新输入 因此 能够存储并且把这些相关对象传 送到商业应用中是这些applet有别于其它applet的优势 目前已经有许多方法能实现对象的持久化 例如使用对象数据库和磁盘文件 同样的也有许多办法可以共享对象 例如将数据写入一个套接字 或者实现一个符合CORBA SOM的模 型 以上这几种方案均有自己的优点 当你设计你的商业解决方案时 需要认真地考虑这些方案 但是 还有一种开销不大但可靠的方法 它使用Internet和Intranet用户能够获取的 技术服务在世界范围传送对象的拷贝 它就是简单邮件传输协议 SMTP 用E mail发送Java对象 存储和保存对象的一个简单方法是将对象序列化而后用E mail将它发送给别的用户 这种 方法有以下优点: 发送的计算机或NC(网络计算机)无需硬盘空间 使用现有的系统传送 排队 发送对象 允许用户使用最喜欢的邮件客户程序来接受邮件 提供简单的机制将同一对象的拷贝分发给许多人 这种方法也有不足之处: 邮件的传送可能因为E mail主机的关机而被较长时间地延迟 所有的主机都可能出现这 种情况 E mail服务器的错误恢复优先级通常比数据库服务器低 邮件的传送不能得到保证 在你的E mail服务器通知你邮件没有发出时 你不得不重新 发送邮件 E mail服务器和POP客户程序的功能不足以处理大量交易信息 这些不足和你使用的应用程序有关 对于很多商业解决方案 这些不足并不重要 作为一个设计人员 你工作的一部分就是在全面考虑价格 性能和需求的情况下确定系统的最佳整体结构 使用Java传送对象的四个步骤: Applet必须依次以下面所列出的四个步骤传送Java对象: 序列化有关对象 发送时选择Base 编码方式对序列化对象编码(RFC ) 与一个SMTP服务器连接 将该对象传送到这个SMTP服务器 下面将介绍如何用E mail发送一个假设的 臭虫 报告到公司的质量保证部门 将对象序列化 JDK 提供的一个奇妙的机制 java io Serializable接口 能够序列化并且重建对象 这个接口能使用存储对象(writeObject())和恢复对象(readObject())方法函数 在很多 情况下 使用这个接口很方便 只需实现并且调用这两个方法函数 以下的代码定义了一个简单的BugReport对象 它实现了最简单的序列化接口 import java Io *; public class BugReport implements Serializable private Float m_SofareVersion; // version number from Help About e g private String m_ErrorDescription; // Description of error private int m_Severity; // =System unusable =Minor Aesthetic defect public BugReport (Float SofareVersion String ErrorDescription int Severity) m_SofareVersion = SofareVersion; m_ErrorDesctiption = ErrorDescription; m_Severity = Severity; public BugReport () // for reconstituting serialized objects public void save (OutputStream os) throws IOException try ObjectOutputStream o = new ObjectOutputStream(os); o writeObject(this); o flush(); catch (IOException e) throw e; public BugReport restore (InputStream is) throws IOException ClassNotFoundException BugReport RestoredBugReport = null; try ObjectInputStream o = new ObjectInputStream(is); RestoredBugReport = (BugReport)o readObject(); catch (IOException e) throw e; catch (ClassNotFoundException e) throw e; return RestoredBugReport; 使用import语句引入I/O包 包括序列化接口 定义类中的成员变量 并指出该类实现了序列化接口 提供一个简单的构造函数 一个空的构造函数 这个构造函数在重建序列化对象时使用 见以下的例子 定义一个方法函数 它把对象写入一个已经打开了的ObjectOutputStream 这个方 法函数首先创建一个ObjectOutputStream对象 然后调用writeObject方法函数 最后在 函数返回前显式清空输出缓冲区 定义一个方法函数 它从一个打开了的InputStream中读入一个BugReport对象 注 意 如果输入流中下一个对象和正在读入对象的类型不一致时 readObject()将会抛出一 个异常 使用BugReport对象相当简单 譬如我们想要创建一个新的BugReport对象并且把它存入 一个文件 我们会用到以下代码: import java io *; BugReport bug = new BugReport( Crashes when spell checker invoked ); FileOUtputStream os = new FileOutputStream( MyBug test ); bug save(os); 很简单 对吗?当然 一旦对象已经被序列化 没有人能阻止你继续操纵对象的状态 上一 个例子中包涵了一个在被写入磁盘时已经存在对象的拷贝 因此你必须要十分谨慎 以防 在对对象做出所有的修改之后没有序列化对象 从而丢失了对象的状态修改信息 以下是怎样恢复一个对象的拷贝: import java io * FileInputStream fis = new FileInputStream( MyBug test ); BugReport bug = new BugReport() restore(fis); 这更简单!是不是Java的功能越来越强大了? 现在我们修改第二个例子的第 行 使对象被写入一个字节数组而不是一个文件: import java io * BugReport bug = new BugReport( Crashes when spell checker invoked ); 字 节ArrayOutputStream os = new 字 节ArrayOutputStream(); bug save(os); 好了 我们已经构造了一个对象 并且学会把它序列化后放入一个字节OutputStream 然 后 我们将把这个字节OutputStream转化为一个Base 编码的字符串 Base 编码 目前的Internet E mail标准 简单邮件传递协议(SMTP)在RFC 中宣布 对于我们来说 RFC 对邮件的内容规定了两条重要但不难实现的限制 邮件的内容必须全部为 比特的美国ASCII码 每一行的长度不能超过 的字符 因此为了通过SMTP用E mail进行传送 内存的序列化对象必须转化为和以上相容的格式 RFC 提供了一个可行的方案 它定义了邮件的内容部分 使之能包涵多种形式的数 据 这种标准就是目前众所周知的MIME 按照RFC 编码过程为:输入是 个比特 输出是 个字节 个比特输入组从左至右 由 个 比特的输入组形成 这 个比特被看成 个连续的 比特组 而每个 比特输入组被翻 译为Base 码表中的一个数字 这意味着如果我们有下面的 个字节的输入 xC xF xFF 它将会被转化为如下 的Base 的编码:x xF xF x F 图Base 编码实例 Base 编码似乎有点神秘 但实现它的代码却非常简单 在下面的程序中我们可以看到 这一点 在这个例子中 我们创建了一个新类 Codecs 现在 Codecs有两个方法函数:一 个用来对字符数组编码 一个用来对String类编码 对String类编码的方法函数简单地调 用String类的getBytes()函数 然后对返回的结果字符数组进行编码 我们将增加从Base 解 码至原先格式的方法函数 public class Codecs private Codecs() // do not instantiate this class public final static String base Encode(String strInput) if (strInput == null) return null; byte byteData[] = new byte[strInput length()]; strInput getBytes( strInput length() byteData ); return new String(base Encode(byteData) ); public final static byte[] base Encode(byte[] byteData) if (byteData == null) return null; int iSrcIdx; // index into source (byteData) int iDestIdx; // index into destination (byteDest) byte byteDest[] = new byte[((byteData length+ )/ )* ]; for cha138/Article/program/Java/hx/201311/26869相关参考
Java如何共享资源 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 对一种特殊的资源——对象
Java中多线程之间可以通过接口来实现信息共享 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 提
知识大全 编写可在线收发E-mail的Java Applet
编写可在线收发E-mail的JavaApplet 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
不同线程间进行通信通常有两种简单方法 方法一通过访问共享变量的方式(注需要处理同步问题) 方法二通过管道流 其中方法一有两种实现方法即 方法一a)通过内部类实现线程的共享变量 代码如下
DelphiforLinux中应用共享对象库 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本文用通
Java多线程共享数据、同步、通信 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一线程共享数据
JAVA远程访问共享目录 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 相关知识介绍 SMB
用JAVA访问共享文件系统 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 前言 在Micros
java对象序列化机制一般来讲有两种用途 需要将对象的状态保存到文件中而后能够通过读入对象状态来重新构造对象恢复程序状态 使用套接字在网络上传送对象的程序来说是很有用的
共享内存在Java中的实现和应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 共享内存对应应用