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

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

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

    騎豬闖天下

    J2ME隨筆,記錄成長的腳步

    統計

    留言簿(3)

    閱讀排行榜

    評論排行榜

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

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

    1.通過對已下載數據的RMS存儲,可以實現文件的斷點續傳;
    2.通過對下載列表的記錄,可以實現已下載、正在下載、暫停,等待下載等的區分;
    3.因為是反復操作RMS,所以對內存的回收一定要注意,操作結束立刻要回收;
    4.因為是反復操作RMS,所以每次有設計到RMS有關的操作,必然遍歷已下載或比較書名等,都要先讀取下RMS;
    5.Symbian S40系統的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命名規則:
         *     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";    //存儲每塊數據中的廢字節數
         *    
    @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,當不存在時創建一個新的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上的字節數組數據
         * 
    @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 騎豬闖天下 閱讀(295) 評論(0)  編輯  收藏


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲AV无码国产在丝袜线观看| 成人免费看黄20分钟| 国产91精品一区二区麻豆亚洲| 久久亚洲精品无码网站| 青春禁区视频在线观看直播免费| 亚洲不卡在线观看| 啦啦啦高清视频在线观看免费| 精品亚洲AV无码一区二区三区 | 97性无码区免费| 亚洲精品熟女国产| 日本亚洲免费无线码| 亚洲性无码一区二区三区| 在线观看亚洲免费视频| 国产亚洲精品美女久久久久久下载| 国产人成免费视频| 一本久久A久久免费精品不卡| 亚洲伊人成无码综合网 | 羞羞视频在线免费观看| 亚洲国产精品无码久久青草 | 精品久久8x国产免费观看| 在线亚洲高清揄拍自拍一品区| 免费涩涩在线视频网| 一级毛片一级毛片免费毛片| 亚洲精品国精品久久99热一| 综合在线免费视频| 男女污污污超污视频免费在线看| 亚洲精品国产美女久久久| 国产免费不卡视频| 深夜A级毛片视频免费| 亚洲成在人天堂一区二区| 无码中文在线二区免费| 四虎影视久久久免费| 亚洲人成电影福利在线播放| 成人午夜大片免费7777| a级男女仿爱免费视频| 亚洲中文字幕人成乱码| 亚洲中文无韩国r级电影| www视频在线观看免费| 一区二区三区免费视频网站| 久久精品蜜芽亚洲国产AV| 日韩亚洲精品福利|