GCF 是一组在 javax.microedition.io 包中定义的接口。图 1 显示了 GCF 的类层次结构。
通用连接框架介绍
图 1. 通用连接框架的类层次结构
在 GCF 中共定义了七个接口 ,其中 Connection 是根。注意同时提供了对数据包(packet)和流连接的支持。正如您设想的那样,沿着层次结构向下就会发现提供更多功能的接口。例如, StreamConnection 支持输入和输出流, ContentConnection 扩展了 StreamConnection 以支持对流的内容类型、数据长度和编码格式的确定。
Connector 类用于在 GCF 中打开类型的连接。下面可以看到 Connector 类中的 open() 方法的格式:Connector.Open("protocol:address;parameters"); Open方法会根据你提供的字符串参数进行Connection的绑定。
GCF 在支持不同的连接协议方面特别灵活。在请求打开一个连接时, Connector 类使用其 Class.forName() 方法搜索实现了所请求的协议的类。如果找到这个类,就返回一个实现了 Connection 接口的对象。
下面是一些常用打开一个Connection的方法:
Connector.Open("http://www.itpub.net");//通过Http协议数据通信
Connector.Open("datagram://www.ucweb.com:1000");//数据报套接字通讯建立
Connector.Open("file://makefile.txt");//访问手机文件
Connection conn = Connector.open("comm:0; baudrate=5333");//基于串口协议的数据通信
连接框架的用法
七种创建连接的方法,下面是代码示例
public static Connection open(String name)
public static Connection open(String name, int mode, boolean timeouts)
public static DataInputStream openDataInputStream(String name)
public static DataOutputStream openDataOutputStream(String name)
public static InputStream openInputStream(String name)
public static OutputStream openOutputStream(String name)
Connector 构建了7个静态的方法,上面方法,具体的相关用法以及参数说明可以查看APIs文档。
通讯连接的IO数据流过程基本步骤分别是建立连接、网络通讯、连接关闭。
1、建立连接,创建与服务端的连接初始化以及完成连接过程。
2、数据通讯,在连接已建立的基础上进行数据的交换以及完成通讯过程。
3、完成通讯之后即关闭网络通讯连接,释放资源。
使用小秘密:
在程序调用Connector.open()相关方法的时候,如果您的J2ME程序是没有经过签名的,系统会弹出一个是否允许的对话框,其实,我们在开发的过程中也可以调用下面的代码进行一些权限的判断,然后做出适当的动作。
MIDlet. checkPermission("javax.microedition.io.Connector.file.read");
MIDlet. checkPermission("javax.microedition.io.Connector.file.write");
MIDlet.checkPermission("javax.microedition.io.Connector.http")
其他一些权限检查请查看相关的APIs文档。
简单用法代码片段
String url = "http://www.corej2me.com"
ContentConnection connection = (ContentConnection) Connector.open(url);
// With the connection, open a stream
InputStream iStrm = connection.openInputStream();
// ContentConnection includes a length method
int length = (int) connection.getLength();
if (length != -1)
{
byte imageData[] = new byte[length];
// Read the data into an array
iStrm.read(imageData);
}