亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于J2ME持久存儲(chǔ)技術(shù)的研究

        2009-04-29 00:00:00饒麗君王艷陽(yáng)
        電腦知識(shí)與技術(shù) 2009年4期

        摘要:隨著移動(dòng)設(shè)備性能的不斷提高,人們對(duì)手機(jī)等移動(dòng)通信終端的應(yīng)用需求越來(lái)越迫切,基于此平臺(tái)的應(yīng)用系統(tǒng)將越來(lái)越豐富。該文探討了運(yùn)用J2ME技術(shù)中的記錄管理系統(tǒng)(Record Management System,RMS)實(shí)現(xiàn)數(shù)據(jù)的持久存儲(chǔ)。通過(guò)對(duì)RMS的應(yīng)用和文件流的操作提出了基于移動(dòng)通信終端的公交查詢(xún)系統(tǒng)的解決方案。

        關(guān)鍵詞:J2ME;RMS;持久存儲(chǔ);文件流;公交查詢(xún)

        中圖分類(lèi)號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2009)04-0880-03

        The Research of Persistent Storage Technology Based on J2ME

        YAO Qing1, RAO Li-jun2, WANG Yan-yang2

        (Xi’an University of Architecture and Technology,Xi’an 710055,China)

        Abstract: With the improvement in the performance of mobile devices, people to the mobile device application demands are more and more urgent, the application system base on this platform will be more and more abundant. This article discussed that the application of Record Management System (RMS) in the J2ME technology implemented the data persistent storage. Through the application of RMS and the operation of file stream, we proposed the solution of bus information query base on the mobile device.

        Key words: J2ME; RMS; persistent storage technology; file Stream; bus information query

        1 引言

        隨著3G時(shí)代的到來(lái),移動(dòng)電話(huà)正在成為不可或缺的個(gè)人工具,成為移動(dòng)信息時(shí)代管理個(gè)人商務(wù)、工作和生活的工具。而與其相關(guān)的軟件市場(chǎng)更是具有無(wú)窮潛力,目前,人們對(duì)計(jì)算機(jī)功能的依賴(lài)越來(lái)越強(qiáng)烈,移動(dòng)手機(jī)終端的作用也將會(huì)體現(xiàn)出越來(lái)越重要的位置。人們希望手機(jī)像個(gè)人計(jì)算機(jī)一樣,能方便地為這些移動(dòng)設(shè)備安裝各種需要的應(yīng)用軟件,而不用重新購(gòu)買(mǎi)新的設(shè)備。面對(duì)上述的各種需求,基于手機(jī)的移動(dòng)應(yīng)用開(kāi)發(fā)逐漸成為一個(gè)炙手可熱的話(huà)題。

        基于Java2平臺(tái)微型版(Java2 Platform Micor Edition,J2ME)的通用解決方案提高了手機(jī)軟件的附加值,越來(lái)越多的手機(jī)廠商都支持了Java軟件的應(yīng)用,基于J2ME平臺(tái)的手機(jī)應(yīng)用也將成為今后手機(jī)軟件發(fā)展的趨勢(shì)。

        數(shù)據(jù)持久存儲(chǔ)是一個(gè)應(yīng)用程序最基本的問(wèn)題,任何應(yīng)用系統(tǒng)必須要解決這一問(wèn)題。數(shù)據(jù)持久必須以某種方式保存,不能丟失,并且能夠有效的、簡(jiǎn)便的檢索及更新。記錄管理系統(tǒng)(Record Management System,RMS),它的出現(xiàn)為在移動(dòng)信息設(shè)備上進(jìn)行數(shù)據(jù)的持久存儲(chǔ)提供了支持,實(shí)現(xiàn)了數(shù)據(jù)的存儲(chǔ)和檢索功能,完成了基本的數(shù)據(jù)管理。它實(shí)現(xiàn)的功能相當(dāng)于一個(gè)小型的手機(jī)信息數(shù)據(jù)庫(kù)。但是,考慮手機(jī)平臺(tái)的現(xiàn)實(shí)特點(diǎn),內(nèi)存的使用具有很大的限制,在手機(jī)程序中如何實(shí)現(xiàn)數(shù)據(jù)的持久性存儲(chǔ)具有現(xiàn)實(shí)的意義,本文討論了一種運(yùn)行于移動(dòng)手持設(shè)備的公交查詢(xún)系統(tǒng)的實(shí)現(xiàn)方案,通過(guò)這個(gè)案例能對(duì)記錄管理系統(tǒng)的應(yīng)用有一個(gè)更深層的認(rèn)識(shí),介紹了記錄管理系統(tǒng)的設(shè)計(jì)思想、使用方法及技巧[1]。

        2 RMS體系結(jié)構(gòu)

        RMS(Record Management System)是一個(gè)簡(jiǎn)單的面向記錄(Record)的數(shù)據(jù)庫(kù),也稱(chēng)為記錄存儲(chǔ)(RecordStore)。在J2ME中,RMS作為唯一的永久性存儲(chǔ)工具,可以把它看作是由許多記錄組合而成的一個(gè)個(gè)數(shù)據(jù)庫(kù)表文件,這些記錄將持久地保存和支持跨多個(gè)MIDlet的請(qǐng)求。MIDlet的記錄存儲(chǔ)由平臺(tái)負(fù)責(zé)維護(hù),也由平臺(tái)決定生成的位置,但決定記錄存儲(chǔ)命名空間的是MIDlet套件(即打包在一起的一個(gè)或多個(gè)MIDlet)。

        在RMS中存儲(chǔ)的數(shù)據(jù)是以記錄(Record)為單位的,記錄不能單獨(dú)存在,必須屬于某個(gè)RecordStore。RMS記錄存儲(chǔ)中的每一條記錄都包括兩列:一列用于存儲(chǔ)惟一的記錄標(biāo)識(shí),另外一列存儲(chǔ)代表記錄中數(shù)據(jù)的一組字節(jié)。表1展示了一個(gè)簡(jiǎn)單的記錄存儲(chǔ)數(shù)據(jù)庫(kù)。

        表1 一個(gè)簡(jiǎn)單的記錄數(shù)據(jù)庫(kù)

        記錄管理系統(tǒng)沒(méi)有對(duì)數(shù)據(jù)的形式做限制,記錄可以是字符、數(shù)字、數(shù)組或者圖片,只要數(shù)據(jù)可以被轉(zhuǎn)化成字節(jié)數(shù)組就可以。惟一記錄ID是一個(gè)整型值,用作記錄的主關(guān)鍵字。第一條記錄ID為1,然后是2,以此類(lèi)推。一條記錄被刪除之后,它的記錄ID不會(huì)被重用。也就是說(shuō),如果表中有三條記錄,ID分別是1,2 和3,刪除ID 2,將把這個(gè)標(biāo)識(shí)永久性地從記錄存儲(chǔ)中刪除。如果我們向這個(gè)表中添加另外一條記錄,那么該行的標(biāo)識(shí)將會(huì)是4。并且所添加的每個(gè)記錄的長(zhǎng)度不一定相同。應(yīng)用程序負(fù)責(zé)對(duì)數(shù)據(jù)進(jìn)行編碼,將其轉(zhuǎn)換位字節(jié)數(shù)組并寫(xiě)入到RMS中;從RMS中讀出的數(shù)據(jù)依然是字節(jié)數(shù)組,應(yīng)用程序需要對(duì)數(shù)據(jù)進(jìn)行解碼并轉(zhuǎn)換為原始數(shù)據(jù)。

        記錄存儲(chǔ)是用名稱(chēng)來(lái)標(biāo)識(shí)的。記錄存儲(chǔ)的名稱(chēng)最多可以包含32個(gè)字符,并且所有字符都是大小寫(xiě)敏感的。同一個(gè)MIDlet套件中不會(huì)包含兩個(gè)名稱(chēng)相同的記錄存儲(chǔ)。每個(gè)記錄存儲(chǔ)都會(huì)有個(gè)全名,即“MIDlet Suite名稱(chēng)+供貨商名稱(chēng)+記錄倉(cāng)庫(kù)的名稱(chēng)”。

        3 實(shí)現(xiàn)公交查詢(xún)中的關(guān)鍵技術(shù)

        本文通過(guò)實(shí)現(xiàn)公交查詢(xún)系統(tǒng)為例,詳細(xì)說(shuō)明了RMS數(shù)據(jù)庫(kù)在J2ME技術(shù)中的應(yīng)用,下面就結(jié)合代碼介紹一下記錄管理系統(tǒng)的設(shè)計(jì)思想、使用方法及技巧。

        3.1 數(shù)據(jù)的讀入

        由于手機(jī)資源受限,數(shù)據(jù)的大小受到了內(nèi)存的限制,而完成信息查詢(xún)系統(tǒng)有需要大量的數(shù)據(jù),所以首要問(wèn)題是應(yīng)當(dāng)怎樣把數(shù)據(jù)按照規(guī)定格式放入RMS中去。顯然,由于數(shù)據(jù)量比較大,不能選擇直接用程序?qū)懭?,從文本文件中讀取數(shù)據(jù)是比較合理的選擇。在這里我們要把所有的公交信息寫(xiě)入一個(gè)UTF-8字符編碼txt文件,然后通過(guò)對(duì)文件流的操作把它讀入RMS中。定義一條標(biāo)準(zhǔn)的公交信息為:

        {車(chē)次, 起始時(shí)間, 結(jié)束時(shí)間, 始發(fā)站, 終點(diǎn)站, 上行路線(xiàn), 下行路線(xiàn), 票價(jià)}

        公交信息的數(shù)據(jù)分類(lèi)都由“,”隔開(kāi),下文是數(shù)據(jù)格式化的程序的部分核心代碼,代碼力求短小精煉,并輔助適當(dāng)?shù)恼f(shuō)明和注釋。

        從txt讀出數(shù)據(jù)串源程序,這里的參數(shù)name為txt資源地址:

        public String read_UTF(String name){

        String strReturn = \"\"; //數(shù)據(jù)字符串定義

        InputStream in = 1; //定義輸入流對(duì)象

        byte[] data = new byte[1024];//定義數(shù)據(jù)大小

        try {

        in = getClass().getResourceAsStream(name); //查找資源文件

        in.read(data); //讀入數(shù)據(jù)

        in.close();

        strReturn = new String(data,\"UTF-8\");

        } catch (Exception e) {

        System.out.println(\"read error\" + e.toString());

        }

        finally{

        in = 1;

        }

        return strReturn; //返回?cái)?shù)據(jù)字符串

        }

        在這里還要用到字符串處理的一點(diǎn)技巧,雖然Java中提供的String類(lèi)的字符串方法很多,但是由于J2ME只包含一部分方法。這里需要用到String類(lèi)中的slipt()方法,但是J2ME里面卻沒(méi)有包含這個(gè)方法,所以這里重新寫(xiě)了分隔方法,下面是源代碼:

        public static String[] split(String original,String regex){

        //參數(shù)original為需要分隔字符串,regex為分割字符

        int startIndex = 0;//取子串的起始位置

        Vector v = new Vector(); //將結(jié)果數(shù)據(jù)先放入Vector中

        String[] str = 1; //返回的結(jié)果字符串?dāng)?shù)組

        int index = 0; //存儲(chǔ)取子串時(shí)起始位置

        startIndex = original.indexOf(regex); //獲得匹配子串的位置

        while(startIndex < original.length() startIndex != -1)

        {

        String temp = original.substring(index,startIndex);

        System.out.println(\" \" + startIndex);

        v.addElement(temp); //取子串

        index = startIndex + regex.length();//設(shè)置取子串的起始位置

        startIndex = original.indexOf(regex,startIndex + regex.length()); //獲得匹配子串的位置

        }

        v.addElement(original.substring(index + 1 - regex.length()));//取結(jié)束的子串

        str = new String[v.size()];//將Vector對(duì)象轉(zhuǎn)換成數(shù)組

        for(int i=0;i

        {

        str[i] = (String)v.elementAt(i);

        }

        return str; //返回生成的數(shù)組

        }

        3.2 公交數(shù)據(jù)的讀取寫(xiě)入

        公交數(shù)據(jù)安全完整的讀出寫(xiě)入是整個(gè)系統(tǒng)的關(guān)鍵,這里建立了一個(gè)公交信息類(lèi)BusDataEntity,它抽象地代表了RMS中的一條記錄,RMS里只能存儲(chǔ)字節(jié)化后的數(shù)據(jù),所以在這個(gè)類(lèi)里面必須定義它自身的讀取寫(xiě)入RMS的方法,寫(xiě)入方法encode()通過(guò)把整個(gè)對(duì)象序列化成byte數(shù)組存入RMS記錄倉(cāng)儲(chǔ),讀取方法decode()從RMS數(shù)據(jù)倉(cāng)儲(chǔ)中讀出一個(gè)byte數(shù)組,然后恢復(fù)成原本的對(duì)象內(nèi)部的狀態(tài),在此我們要借助四個(gè)類(lèi)的協(xié)助,它們分別是ByteArrayOutStream、ByteArrayInStream、DataOutputStream和DataInputStream。下面就是這兩個(gè)方法的源代碼:

        public byte[] encode(){

        byte[] result = 1;

        try {

        ByteArrayOutputStream bos = new ByteArrayOutputStream();

        DataOutputStream dos = new DataOutputStream(bos);

        dos.writeUTF(busID);//寫(xiě)入車(chē)次

        ... //寫(xiě)入其它信息

        result = bos.toByteArray();//將數(shù)據(jù)全部轉(zhuǎn)化為byte[]

        dos.close();

        bos.close();

        } catch (Exception e) {}

        return result;

        }

        public void decode(byte[] data){

        try {

        ByteArrayInputStream bis = new ByteArrayInputStream(data);

        DataInputStream dis = new DataInputStream(bis);

        busID = dis.readUTF();//解析出車(chē)次

        ... //解析其它信息

        dis.close();

        bis.close();

        } catch (Exception e) {}

        }

        這里用DataOutputStream,將數(shù)據(jù)先進(jìn)行格式的轉(zhuǎn)換和數(shù)據(jù)編碼,然后再存入byte 數(shù)組中,完成了存的過(guò)程。取的過(guò)程與此類(lèi)似,不同的是輸出流變成了輸入流,編碼過(guò)程變成解碼過(guò)程。

        3.3 RMS中數(shù)據(jù)的操作

        由于RMS數(shù)據(jù)表結(jié)構(gòu)比較簡(jiǎn)單,所以對(duì)其數(shù)據(jù)的操作非常簡(jiǎn)單,J2ME中提供了對(duì)數(shù)據(jù)操作的很多方法,包括了增、刪、改、查。當(dāng)要訪問(wèn)RMS數(shù)據(jù)時(shí),必須通過(guò)RecordStore類(lèi)提供的openRecordStore()方法開(kāi)啟RMS。開(kāi)啟RMS之后,當(dāng)我們要寫(xiě)入一條公交信息時(shí),只需用addRecord((BusDataEntity). Encode(),0,(BusDataEntity). Encode().length)即可把數(shù)據(jù)添加到RMS中。其它的操作這里不做詳細(xì)介紹。

        當(dāng)涉及多條記錄的操作,如記錄存儲(chǔ)中記錄的遍歷、排序和查找,就要使用枚舉器、比較器和過(guò)濾器。構(gòu)建枚舉器、比較器和過(guò)濾器對(duì)象需要實(shí)現(xiàn)RMS 類(lèi)包中的其它三個(gè)接口,分別為枚舉器接口RecordEnumeration、比較器接口RecordComparator 和過(guò)濾器接口RecordFilter。

        4 結(jié)束語(yǔ)

        根據(jù)官方公布的統(tǒng)計(jì)數(shù)據(jù),我國(guó)移動(dòng)電話(huà)用戶(hù)已突破6億,因此在可預(yù)見(jiàn)的將來(lái),移動(dòng)手持設(shè)備的應(yīng)用將帶來(lái)比傳統(tǒng)通信業(yè)務(wù)以及短信息業(yè)務(wù)更高的利潤(rùn),本文討論的這種基于J2ME的公交查詢(xún)系統(tǒng)是對(duì)這種應(yīng)用的一個(gè)探討,為開(kāi)發(fā)更復(fù)雜的應(yīng)用系統(tǒng)打下基礎(chǔ),本程序設(shè)計(jì)實(shí)現(xiàn)了手機(jī)上以J2ME為平臺(tái)的公交查詢(xún)的開(kāi)發(fā),采用從外部文件讀取數(shù)據(jù),具有一定的可移植性,下一步要研究基于這個(gè)方向的免費(fèi)無(wú)線(xiàn)應(yīng)用服務(wù),這樣能夠?yàn)橛脩?hù)帶來(lái)更為方便實(shí)用的體驗(yàn)。

        參考文獻(xiàn):

        [1] 詹建飛.java ME核心技術(shù)與最佳實(shí)踐[M].北京:電子工業(yè)出版社,2007.

        [2] 王森.java手機(jī)/PDA程序設(shè)計(jì)入門(mén)[M].北京:電子工業(yè)出版社,2004.

        [3] Keogh J.J2ME 開(kāi)發(fā)大全[M].北京:清華大學(xué)出版社,2004.

        [4] 詹建飛.J2ME開(kāi)發(fā)精解[M].北京:電子工業(yè)出版社,2006.

        [5] 仵博,張立涓,池瑞楠.J2ME無(wú)線(xiàn)開(kāi)發(fā)實(shí)用教程[M].北京:清華大學(xué)出版社,2006.

        99精品国产综合久久麻豆| 麻豆久久五月国产综合| 亚洲成熟丰满熟妇高潮XXXXX | 精品一区二区三区老熟女少妇 | 久久久免费精品re6| 永久免费观看的毛片手机视频 | 久草视频在线这里只有精品| 国产久色在线拍揄自揄拍| 日韩精品专区av无码| 免费无码av片在线观看| 18禁国产美女白浆在线| 国产在线av一区二区| 真实国产精品vr专区| 国产喷水福利在线视频| 国产精品日韩中文字幕| 自拍视频在线观看首页国产| 人人色在线视频播放| 国产成人一区二区三中文| 蜜桃视频网站在线免费观看| 亚洲av天堂在线视频| 99国内精品久久久久久久| 国产一区二区三区精品久久呦| 黄片免费观看视频播放| 午夜天堂精品久久久久| 无码夜色一区二区三区| 国产成人自拍视频在线免费| 亚洲精品久久区二区三区蜜桃臀 | 国产成人精品午夜福利| 手机免费日韩中文字幕| 一区二区三区免费看日本| 高清破外女出血av毛片| 亚洲三级香港三级久久| 丝袜美腿诱惑区在线播放| 国产精品久久成人网站| 日韩亚洲中字无码一区二区三区| 美女一区二区三区在线观看视频| 国产情侣自拍一区视频| 国产国语熟妇视频在线观看| 天天中文字幕av天天爽| 午夜福利视频一区二区二区| 小荡货奶真大水真多紧视频|