<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 騎豬闖天下 閱讀(299) 評論(0)  編輯  收藏


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


    網站導航:
     
    主站蜘蛛池模板: 最近免费中文字幕大全视频| 色婷婷亚洲一区二区三区| XXX2高清在线观看免费视频| 免费人成视频在线观看不卡| 精品国产亚洲一区二区三区在线观看| 一个人免费观看www视频在线| 亚洲人成在线精品| 成年男女免费视频网站| 亚洲色在线无码国产精品不卡| 无码一区二区三区免费视频| 大桥未久亚洲无av码在线| 又大又黄又粗又爽的免费视频| 免费一级做a爰片久久毛片潮| 亚洲日韩中文字幕在线播放| 成人片黄网站色大片免费| 亚洲一级毛片免观看| 黄+色+性+人免费| 伊人久久五月丁香综合中文亚洲 | 亚色九九九全国免费视频| 日韩亚洲人成在线| 日本一线a视频免费观看| 七次郎成人免费线路视频| 久久亚洲精品视频| 青青青国产在线观看免费| 18禁亚洲深夜福利人口| 国产亚洲精品成人a v小说| 无码av免费网站| 亚洲精品无码专区在线| 亚洲综合色视频在线观看| 在线美女免费观看网站h| 亚洲熟妇av午夜无码不卡| 亚洲综合在线另类色区奇米| 成人免费视频网站www| 免费人成又黄又爽的视频在线电影| 亚洲日韩精品无码专区网址| 亚洲性线免费观看视频成熟 | 免费国产作爱视频网站| 免费一级全黄少妇性色生活片 | 亚洲欧洲日韩极速播放| 亚洲?V无码成人精品区日韩| 最近中文字幕免费完整|