2.2 文件系统
基于MIDP的JAVA应用以及MIDP本身在某些时候要求数据能够长期保存,即使在应用退出或系统掉电的情况下,数据也不能丢失。这就必须借助于MIDP的文件系统。MIDP的文件系统同样分为JAVA层(称为RMS,即Record Manage System)和本地方法层。一般情况下,文件系统的JAVA层不用移植就可以在任何平台上运行,但如果目标平台的文件系统较为特殊,例如采用数据库的记录方式保存数据,甚至根本就没有提供高效的数据存取接口,我们就必须自己实现数据存取接口。这样,JAVA层就需要跳过RMS而直接通过本地方法调用本地接口,相应的RMS的JAVA代码就可以从MIDP中删去。
而在文件系统的本地方法层,MIDP会调用目标平台的数据存取接口来实现MIDP本身的数据存取。这些接口是平台相关的,是文件系统中需要移植的部分。这些调用被放在文件src/share/native/storage.c中,主要包括文件的打开(open)、文件的关闭(close)、文件的读写(read、write)、文件属性的获取(size、freesize等)、文件的删除(delete)、文件的定位(seek)、文件的删节(truncate)等。以下便是MIDP文件系统在Windows下的部分实现。
文件的打开:
int storageOpen(char**ppszError,char*pszAsciiFilename,int ioMode){
……
handle=open(pszAsciiFilename,flags,creationMode);
……
}
文件的关闭:
void storageClose(char**ppszError,int handle){
……
status=close(handle);
……
}
文件的读取:
int storageRead(char**ppszError,int handle,char*buffer,int length)
{
……
bytesRead=read(handle,buffer,length);
……
}
文件的写入:
void storageWrite(char**ppszError,int handle,char*buffer,int length){
……
bytesWritten=write(handle,buffer,length);
……
}
还有许多其它有关文件的操作,移植时只需使用目标平台的API替换以上的Widnows调用,这里就不再逐一列举。
2.3 用户图形化接口
用户图形化接口包括画点、画线、作圆、作椭圆、位图拷贝等基本作图函数(可在GRAPHICS.C中找到);有关定时器、屏幕刷新和键盘触控笔消息等有关与用户交互的操作(可在TEXT.C中找到),它是整个MIDP移植中工作量最大,也是对上层应用的执行效率影响最大的一个部分。这是因为用户在应用中看到的各种图形和文字都是调用底层的图形函数在屏幕上作图的结果。由于屏幕要频繁刷新,图形函数也就成为应用调用最多的接口。因此,移植者必须使每一个底层作图函数与硬件设备紧密配合起来,并使用最高效的算法。
在不同的平台上,能最大地发挥其作图功能的函数和算法不尽相,这就要求移植者作大量细致的工作,按照MIDP规范的要求逐一重新实现每一个作图函数和屏幕刷新函 数。下面我们就以将画线函数和位图拷贝函数在Windows上的实现为例,简单说明移植要做的工作(键盘、触控笔是以事件消息的方式实现的,它们的移植与事件消息的移植相同)。
Windows的画线函数接口:
Void LCDUIdrawLine(int pixel,short*clip,void*dst,int dotted,int x1,int y1,int x2,int y2){
……
Polyline(hdc,pts,2);/*绘x1,y1点像素信号*/
……
}
Windwos的屏幕刷新函数:
Void refreshPaintWindow(int x1,int y1,int x2,int y2){
RECT r;
If(x1[!--empirenews.page--]如果这篇内容对您有帮助,欢迎点赞支持!