<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ā)表評論。


    網站導航:
     
    主站蜘蛛池模板: 久久福利资源网站免费看| 无码毛片一区二区三区视频免费播放 | 免费成人福利视频| 内射少妇36P亚洲区| 久久免费观看国产精品88av| 亚洲国产成人精品无码区在线观看| 五月天国产成人AV免费观看| 免费观看四虎精品国产永久| 看成年女人免费午夜视频| yy6080久久亚洲精品| www一区二区www免费| 亚洲另类激情综合偷自拍图| 免费在线观影网站| 三年片免费高清版 | 国产成人免费片在线观看| 久久久久亚洲AV成人无码网站| 亚洲成a人片在线不卡一二三区| 久久精品国产免费一区| 性做久久久久免费观看| 美女视频黄频a免费大全视频| 波多野结衣视频在线免费观看| 久久亚洲sm情趣捆绑调教| 亚洲黄色免费网址| 2020天堂在线亚洲精品专区| 无码人妻丰满熟妇区免费| 国产免费观看网站| WWW国产成人免费观看视频| 亚洲欧洲日产国产综合网| 我们的2018在线观看免费高清| 日本亚洲视频在线| 麻豆高清免费国产一区| 亚洲av无码成人影院一区| 国产亚洲精品久久久久秋霞| 99视频精品全部免费观看| 国产亚洲人成A在线V网站| 久久国产乱子伦免费精品| 亚洲欧美日韩国产精品一区| 亚洲国产一成久久精品国产成人综合 | 亚洲成色在线影院| 在线免费视频一区| 久久最新免费视频|