<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    騎豬闖天下

    J2ME隨筆,記錄成長的腳步

    統(tǒng)計

    留言簿(3)

    閱讀排行榜

    評論排行榜

    [J2ME] 以對象的方式操作RMS

    原則上來說,手機上盡量不允許大批量的操作RMS,但目前這個項目是一個閱讀軟件,不得不把下載到的書存到手機中,這就要反復操作RMS,項目期間出現過很多問題,現把幾個主要的思想記錄下來,以供在以后的項目中做為參考。

    1.通過對已下載數據的RMS存儲,可以實現文件的斷點續(xù)傳;
    2.通過對下載列表的記錄,可以實現已下載、正在下載、暫停,等待下載等的區(qū)分;
    3.因為是反復操作RMS,所以對內存的回收一定要注意,操作結束立刻要回收;
    4.因為是反復操作RMS,所以每次有設計到RMS有關的操作,必然遍歷已下載或比較書名等,都要先讀取下RMS;
    5.Symbian S40系統(tǒng)的RMS非常有限,大致為1-2百k,不適合大數據存儲,S60理論上沒有限制,但存到20M時,有的機子會出問題;
    6.本代碼范例為以對象的方式反復操作RMS,如果小范圍內使用RMS,如只記錄下用戶名密碼等,是不需要這么負責的代碼的;


    代碼范例:
    package com.xuudoo.booking;

    import
     java.io.ByteArrayInputStream;
    import
     java.io.ByteArrayOutputStream;
    import
     java.io.DataInputStream;
    import
     java.io.DataOutputStream;
    import
     java.io.IOException;
    import
     java.io.InputStream;
    import
     javax.microedition.rms.RecordStore;

    import
     com.xuudoo.ewl.EWLScreen;

    public final class RMSRecorderIfno 
    {
        
    private
     ByteArrayOutputStream dis;
        
    private
     ByteArrayInputStream is;
        
    private
     DataOutputStream dis1;
        
    private
     DataInputStream is1;
        
    public
     RecordStore rs;
        
    private
     String rmsName;
        
    public boolean
     boon;
        
    private static long
     length;
        
    private static boolean istrue = false
    ;

        
    /**
         *     RMS命名規(guī)則:
         *     RecordStore.openRecordStore(storeName, false);
         * 
         *  
    @param storeName= "002_" + bookName + "_packet";//
         *    
    @param
     storeName= "002_" + bookName + "_mgz";    //存儲書
         *    
    @param
     storeName= "002_" + bookName + "_info";    //
         *    
    @param
     storeName= "002_" + bookName + "_file";    //
         *    
    @param
     storeName= "002_" + bookName + "_byte";    //存儲每塊數據中的廢字節(jié)數
         *    
    @param
     storeName= "002_" + bookName + "_url";    //存儲url和一本書的總數據塊數
         *    
    @param
     storeName= "002_" + "downloaded";        //存儲已經下載結束書的ID
         *    
    @param
     storeName= "002_" + "downloadpause";        //存儲暫停下載書的ID
         
    */

        
    public RMSRecorderIfno() {
            
    if (!istrue) 
    {
                istrue 
    = true
    ;
                length 
    =
     getAvailable();
            }

        }


        
    /**
         * 打開一個倉儲
         * 
    @param name:倉儲名字
         * 
    @param
     flag:值為true,當不存在時創(chuàng)建一個新的store
         * 
    @return

         
    */

        
    public final boolean open(String name, boolean flag) {
            
    try 
    {
                rmsName 
    =
     name;
                rs 
    =
     RecordStore.openRecordStore(rmsName, flag);
                rs.setMode(
    0true
    );
                boon 
    = true
    ;
            }
     catch (Exception e) {
                e.printStackTrace();
                
    return false
    ;
            }

            
    return true;
        }


        
    public final void openWriteStream() {
            dis 
    = new
     ByteArrayOutputStream();
            dis1 
    = new
     DataOutputStream(dis);
        }

        
        
    public final void closeWriteStream() {
            
    try 
    {
                
    if (dis1 != null)
    {
                    dis1.close();
                    dis1 
    = null
    ;
                }

                
    if (dis != null{
                    dis.close();
                    dis 
    = null
    ;
                }

            }
     catch (IOException e) {
                e.printStackTrace();
            }

        }


        
    public final void write(int k) {
            
    try 
    {
                dis1.writeInt(k);
                
    return
    ;
            }
     catch (Exception exception) {
                exception.printStackTrace();
            }

        }


        
    public final void write(byte data[]) {
            
    try 
    {
                dis1.write(data);
                
    return
    ;
            }
     catch (Exception exception) {
                exception.printStackTrace();
            }

        }


        
    public final void write(boolean flag) {
            
    try 
    {
                dis1.writeBoolean(flag);
                
    return
    ;
            }
     catch (Exception exception) {
                exception.printStackTrace();
            }

        }


        
    public final void write(String s) {
            
    try 
    {
                dis1.writeUTF(s);
                
    return
    ;
            }
     catch (Exception exception) {
                exception.printStackTrace();
            }

        }


        
    public final void write(short word0) {
            
    try 
    {
                dis1.writeShort(word0);
                
    return
    ;
            }
     catch (Exception exception) {
                exception.printStackTrace();
            }

        }


        
    public final byte[] saveStreamToByteArray() {
            
    try 
    {
                dis1.flush();
            }
     catch (Exception exception) 
    {
                exception.printStackTrace();
            }

            
    return dis.toByteArray();
        }


        
    /**
         * 讀取位置K的數據
         * 
    @param k
         * 
    @return

         
    */

        
    public final boolean openReadStream(int k) {
            
    try 
    {
                is 
    = new
     ByteArrayInputStream(getRecord(k));
                is1 
    = new
     DataInputStream(is);
            }
     catch (Exception _ex) {
                
    if
    (BookingMidlet.DEBUG)
                    _ex.printStackTrace();
                
    return false
    ;
            }

            
    return true;
        }


        
    /**
         * 讀取整數值
         * 
    @return
         
    */

        
    public final int readInt() {
            
    try 
    {
                
    return
     is1.readInt();
            }
     catch (Exception exception) {
                
    if
    (BookingMidlet.DEBUG)
                    exception.printStackTrace();
                
    return 0
    ;
            }

        }


        
    public final boolean readBoolean() {
            
    try 
    {
                
    return
     is1.readBoolean();
            }
     catch (Exception exception) {
                exception.printStackTrace();
                
    return false
    ;
            }

        }


        
    public final String readString() {
            
    try 
    {
                
    return
     is1.readUTF();
            }
     catch (Exception exception) {
                
    return null
    ;
            }

        }


        
    /**
         * 返回數據庫中的記錄條數
         * 
    @return
         
    */

        
    public final int size() {
            
    try 
    {
                
    return
     rs.getNumRecords();
            }
     catch (Exception e) {
                
    if(BookingMidlet.DEBUG)
    {
                    e.printStackTrace();
                }

                
    return -1;
            }

        }


        
    public final void setRecord(int k, byte abyte[]) {
            
    try 
    {
                rs.setRecord(k, abyte, 
    0
    , abyte.length);
                
    return
    ;
            }
     catch (Exception exception) {
                exception.printStackTrace();
            }

        }


        
    public final int addRecord(byte abyte0[]) {
            
    try 
    {
                
    return rs.addRecord(abyte0, 0
    , abyte0.length);
            }
     catch (Exception e) {
                
    if(rs != null)
    {
                    UIManager.showAlert(
    "下載失敗,儲存器已滿,請及時清理"
    );
                }

                
    if(UIManager._instance.downloadtool != null && UIManager._instance.downloadtool.conn != null){
                    UIManager._instance.downloadtool.CloseMidlet();
                    UIManager._instance.removeDownloadingItem(UIManager._instance.downloadtool.item);
                    UIManager._instance.removeDownloadedItem(UIManager._instance.downloadtool.item);
                    delete(
    "002_" + UIManager._instance.downloadtool.imageName + "_byte"
    );
                    delete(
    "002_" + UIManager._instance.downloadtool.imageName + "_url"
    );
                    
    if(UIManager._instance.downloadtool.rms != null)
    {
                        UIManager._instance.downloadtool.rms.close();
                        UIManager._instance.downloadtool.rms 
    = null
    ;
                    }

                    delete(
    "002_" + UIManager._instance.downloadtool.imageName + "_mgz");
                    
    if
    (BookingMidlet.DEBUG)
                        EWLScreen.prompt2 
    = "出錯了,請注意!!"
    ;
                }

                
    return -1;
            }

        }


        
    /**
         * 讀取位置K上的字節(jié)數組數據
         * 
    @param k
         * 
    @return

         
    */

        
    public final byte[] getRecord(int k) {
            
    try 
    {
                
    return
     rs.getRecord(k);
            }
     catch (Exception exception) {
                exception.printStackTrace();
                exception.printStackTrace();
                
    return null
    ;
            }

        }


        
    public final void close() {
            
    try 
    {
                
    if (dis1 != null
    {
                    dis1.close();
                    dis1 
    = null
    ;
                }

                
    if (dis != null{
                    dis.close();
                    dis 
    = null
    ;
                }

                
    if (is1 != null{
                    is1.close();
                    is1 
    = null
    ;
                }

                
    if (is != null{
                    is.close();
                    is 
    = null
    ;
                }

                
    if (rs != null{
                    boon 
    = false
    ;
                    rs.closeRecordStore();
                    rs 
    = null
    ;
                    
    return
    ;
                }

            }
     catch (Exception _ex) {
                _ex.printStackTrace();
            }

        }


        
    public static final void delete(String s) {
            
    try 
    {
                RecordStore.deleteRecordStore(s);
                
    return
    ;
            }
     catch (Exception exception) {
                exception.printStackTrace();
            }

        }


        
    public static final boolean a(long l) {
            
    if (l > 0L && l < length) 
    {
                length 
    -=
     l;
                
    return true
    ;
            }
     else {
                
    return false
    ;
            }

        }


        
    public static final boolean b(long l) {
            
    if (l > 0L && length + l <= getAvailable()) 
    {
                length 
    +=
     l;
                
    return true
    ;
            }
     else {
                
    return false
    ;
            }

        }


        
    public static final long h() {
            
    return
     length;
        }


        
    public static final long getAvailable() {
            
    long
     l;
            RecordStore recordstore;
            
    try 
    {
                l 
    = (recordstore = RecordStore.openRecordStore("freeMemory"true
    )).getSizeAvailable();
                recordstore.closeRecordStore();
                
    return
     l;
            }
     catch (Exception exception) {
                exception.printStackTrace();
                
    return 0L
    ;
            }

        }


        
    public static final String[] getList() {
            
    try 
    {
                
    return
     RecordStore.listRecordStores();
            }
     catch (Exception exception) {
                exception.printStackTrace();
                
    return null
    ;
            }

        }


        
    public static final boolean exists(String name) {
            String rmslistname[] 
    =
     getList();
            
    try 
    {
    //            rs = RecordStore.openRecordStore(name, false);

            }
     catch (Exception e) {
                e.printStackTrace();
            }

            
    if (rmslistname == null)
                
    return false
    ;
            
    for (int k = 0; k < rmslistname.length; k++
    )
                
    if
     (rmslistname[k].equals(name))
                    
    return true
    ;
            
    return false
    ;
        }


        
    public static final synchronized void a(String s, int k) {
            
    //   Object obj1 = null;

            try {
                ByteArrayOutputStream bytearrayoutputstream 
    = new
     ByteArrayOutputStream();
                DataOutputStream obj 
    = new
     DataOutputStream(bytearrayoutputstream);
                obj.writeInt(k);
                a(s, bytearrayoutputstream.toByteArray());
                
    if (obj != null
    )
                    ((DataOutputStream) (obj)).close();
            }
     catch (Exception exception) {
                exception.printStackTrace();
            }

        }


        
    public static final synchronized void a(String s, byte abyte0[]) {
            Object obj 
    = null
    ;
            
    try 
    {
                
    if (((RecordStore) (obj = RecordStore.openRecordStore(s, true))).getNumRecords() == 0
    )
                    ((RecordStore) (obj)).addRecord(abyte0, 
    0
    , abyte0.length);
                ((RecordStore) (obj)).setRecord(
    1, abyte0, 0
    , abyte0.length);

                
    if (obj != null
    )
                    ((RecordStore) (obj)).closeRecordStore();

                
    return
    ;
            }
     catch (Exception e) {
                e.printStackTrace();
            }

        }


        
    public static final synchronized boolean d(String s) {
            String as[];
            
    if ((as = RecordStore.listRecordStores()) == null
    )
                
    return false
    ;
            
    for (int k = 0; k < as.length; k++
    )
                
    if
     (as[k].equals(s))
                    
    return true
    ;

            
    return false
    ;
        }


        
    public static final synchronized int e(String s) {
            System.out.println(
    "bn.e(string) s=" +
     s);
            Object obj;
            obj 
    = null
    ;
            
    //     Object obj1 = null;

            int k;
            
    try 
    {
                obj 
    = new
     ByteArrayInputStream(f(s));
                DataInputStream datainputstream;
                datainputstream 
    = new
     DataInputStream((InputStream) (obj));
                k 
    =
     datainputstream.readInt();
                ((ByteArrayInputStream) (obj)).close();

                
    return
     k;
            }
     catch (Exception exception) {
                
    try 
    {
                    
    if (obj != null
    )
                        ((ByteArrayInputStream) (obj)).close();
                }
     catch (Exception ex) {
                    ex.printStackTrace();
                }

                exception.printStackTrace();
                
    return 0;
            }

        }


        
    public static final synchronized byte[] f(String s) {
            System.out.println(
    "bn.f(string) s=" +
     s);
            
    byte abyte0[] = (byte[]) null
    ;
            
    try 
    {
                RecordStore obj 
    = RecordStore.openRecordStore(s, true
    );
                
    if (obj.getNumRecords() == 1
    )
                    abyte0 
    = ((RecordStore) (obj)).getRecord(1
    );
                
    if (obj != null
    )
                    obj.closeRecordStore();

                
    return
     abyte0;
            }
     catch (Exception exception) {
                exception.printStackTrace();
                
    return null
    ;
            }

        }


    }

    posted on 2010-02-25 16:41 騎豬闖天下 閱讀(294) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产精品亚洲二区在线| 亚洲精品蜜夜内射| 麻豆精品不卡国产免费看| 中文字幕看片在线a免费| 亚洲狠狠婷婷综合久久| 色偷偷亚洲男人天堂| 亚洲国产系列一区二区三区| 亚洲国产精品热久久| 亚洲乱码中文论理电影| 亚洲AV无码专区在线观看成人 | 亚洲熟妇av午夜无码不卡| 亚洲美女视频一区| 亚洲成AV人片在WWW色猫咪| 亚洲精品成人在线| 亚洲AV无码成人专区片在线观看| 亚洲综合久久久久久中文字幕| 亚洲av午夜成人片精品网站 | 久久久久国产成人精品亚洲午夜 | 亚洲中文字幕视频国产| 亚洲AV中文无码乱人伦在线视色| 午夜两性色视频免费网站| 亚洲人AV永久一区二区三区久久| 久久精品7亚洲午夜a| 久久久久一级精品亚洲国产成人综合AV区| 亚洲国产AV无码专区亚洲AV| 亚洲国产精品综合久久20| 人妻巨大乳hd免费看| 精品福利一区二区三区免费视频| 精品久久8x国产免费观看| 亚洲第一网站男人都懂| 亚洲精品福利网泷泽萝拉| 香港一级毛片免费看| 亚洲高清免费视频| 国产午夜精品久久久久免费视 | 亚洲AV永久无码精品成人| 亚洲色成人网站WWW永久四虎| 三级毛片在线免费观看| 毛片免费观看的视频| 成年女人色毛片免费看| 亚洲精品午夜无码电影网| 911精品国产亚洲日本美国韩国|