新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 网络学院 > 服务器 > Mail服务器 > 正文:通过E-mail 共享Java 对象

通过E-mail 共享Java 对象

新客网 XKER.COM 2007-01-09 来源: 收藏本文

1 public class Codecs {
2 private Codecs() {} // do not instantiate this class
3 public final static String base64Encode(String strInput) {
4 if (strInput == null) return null;
5 byte byteData[] = new byte[strInput.length()];
6 strInput.getBytes(0, strInput.length(), byteData, 0);
7 return new String(base64Encode(byteData), 0);
8 }
9 public final static byte[] base64Encode(byte[] byteData) {
10 if (byteData == null) return null;
11 int iSrcIdx; // index into source (byteData)
12 int iDestIdx; // index into destination (byteDest)
13 byte byteDest[] = new byte[((byteData.length+2)/3)*4];
14 for (iSrcIdx=0, iDestIdx=0; iSrcIdx >> 2) & 077);
16 byteDest[iDestIdx++] = (byte) ((byteData[iSrcIdx+1] >>> 4) & 017 |
(byteData[iSrcIdx] << 4) & 077); 17 byteDest[iDestIdx++]="(byte)" ((byteData[iSrcIdx+2]>>> 6) & 003 |
(byteData[iSrcIdx+1] << 2) & 077); 18 byteDest[iDestIdx++]="(byte)" (byteData[iSrcIdx+2] & 077); 19 } 20 if (iSrcIdx < byteData.length) { 21 byteDest[iDestIdx++]="(byte)" ((byteData[iSrcIdx]>>> 2) & 077);
22 if (iSrcIdx >> 4) & 017 |
(byteData[iSrcIdx] << 4) & 077); 24 byteDest[iDestIdx++]="(byte)" ((byteData[iSrcIdx+1] << 2) & 077); 25 } 26 else 27 byteDest[iDestIdx++]="(byte)" ((byteData[iSrcIdx] << 4) & 077); 28 } 29 for (iSrcIdx="0;" iSrcIdx < iDestIdx; iSrcIdx++) { 30 if (byteDest[iSrcIdx] < 26) byteDest[iSrcIdx]="(byte)(byteDest[iSrcIdx]" + 'A'); 31 else if (byteDest[iSrcIdx] < 52) byteDest[iSrcIdx]="(byte)(byteDest[iSrcIdx]" + 'a'-26); 32 else if (byteDest[iSrcIdx] < 62) byteDest[iSrcIdx]="(byte)(byteDest[iSrcIdx]" + '0'-52); 33 else if (byteDest[iSrcIdx] < 63) byteDest[iSrcIdx]="+" ; 34 else byteDest[iSrcIdx]="/" ; 35 } 36 for ( ; iSrcIdx < byteDest.length; iSrcIdx++) 37 byteDest[iSrcIdx]="=" ; 38 return byteDest; 39 } 40 } 


1-2定义public的Codecs类和一个不能被用户调用的构造函数。通常,这个类不应被例示。

3-8定义一个encodeBase64()方法函数。它的参数类型是String类型,返回Base64编码的String。 它通过调用String。getBytes()并将结果数组传送至encodeBase64(byte[])来完成函数的 功能。

9-39定义一个encodeBase64()方法函数。参数为字符数组,返回Base64编码的数组数组。

10如果参数值为null,退出方法函数。

11-13定义工作变量,其中字节Dest数组包含了返回调用者的编码。注意,转换后的数组 比输入数组大约大三分之一。这是因为每个三字节s组被转换成四个字节。

14-19循环遍历整个输入数组,每次24比特,把这三个8比特组转换成四个两两之间相距二 比特的6比特组。这段代码比最初出现时简单。仔细学习,看看和前面的例子有什么不同。

20-28如果输入数组的字节s数目不是3的倍数,则转换余下的1或2个字节。

29-35把所得的编码数据作为Base64码表的下标。(Base64码表在RFC1521中说明)

36-37把目标串中的没有使用的字符置为'='。

38返回给调用者基于Based64的编码。
  我们已经取得了很重要的进展。到目前为止,我们已能序列化对象并将它放入内存,把它 转化为基于Base64编码,目的是使用E-mail工具将它发给目标用户。作为我们目前进展的 总结,下面有一个代码片断,它生成一个BugReport对象实例,把它序列化并放入内存,然后 转化为Base64编码。

1 import java.io.*;
2 import Codecs.base64Encode;
:
3 BugReport bug = new BugReport(1.0, "Crashes when spell checker invoked", 2);
4 字 节ArrayOutputStream os = new 字 节ArrayOutputStream();
5 bug.save(os);
6 String strSerializedBug = os.toString();
7 strSerializedBug = Codecs.base64Encode(strSerializedBug);


和SMTP服务器连接

如果你想发一封邮件,必须通过以下五个步骤:

1.为SMTP服务器申请一个域名

2.建立一个TCP/IP的会话(session)

3.在服务器上登录

4.填写收信人的地址

5.撰写邮件的内容

下面分别就这些步骤进行讨论。

     为SMTP服务器申请一个域名
正如你发送普通信件一样,你首先得找一个邮局。对居民区和商业单位来说这是一件非 常简单的事,因为邮筒就在门口。Internet上的电子邮件也同样简单。

收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐