rmsspeed.java

来自「moblie syncml mail javame」· Java 代码 · 共 262 行

JAVA
262
字号
/*
 * Funambol is a mobile platform developed by Funambol, Inc. 
 * Copyright (C) 2003 - 2007 Funambol, Inc.
 * 
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Affero General Public License version 3 as published by
 * the Free Software Foundation with the addition of the following permission 
 * added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED
 * WORK IN WHICH THE COPYRIGHT IS OWNED BY FUNAMBOL, FUNAMBOL DISCLAIMS THE 
 * WARRANTY OF NON INFRINGEMENT  OF THIRD PARTY RIGHTS.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU Affero General Public License 
 * along with this program; if not, see http://www.gnu.org/licenses or write to
 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA 02110-1301 USA.
 * 
 * You can contact Funambol, Inc. headquarters at 643 Bair Island Road, Suite 
 * 305, Redwood City, CA 94063, USA, or at email address info@funambol.com.
 * 
 * The interactive user interfaces in modified source and object code versions
 * of this program must display Appropriate Legal Notices, as required under
 * Section 5 of the GNU Affero General Public License version 3.
 * 
 * In accordance with Section 7(b) of the GNU Affero General Public License
 * version 3, these Appropriate Legal Notices must retain the display of the
 * "Powered by Funambol" logo. If the display of the logo is not reasonably 
 * feasible for technical reasons, the Appropriate Legal Notices must display
 * the words "Powered by Funambol".
 */


/*
 * RMSSpeed.java
 */

package com.funambol.mailclient.test;

import com.funambol.mail.MailException;
import com.funambol.mail.Store;
import com.funambol.mailclient.config.ConfigException;
import com.funambol.mailclient.mm.MessageManager;
import com.funambol.mailclient.ui.controller.UIController;
import com.funambol.util.Log;
import java.io.IOException;
import java.util.Date;
import java.util.Vector;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;


import com.funambol.storage.Serializable;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import com.funambol.storage.ObjectStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStore;

/**
 *
 * A test midlet to estimate the RMS reading/writing speed.
 *
 *
 * Pressing the start button will launch the test: the midlet will create
 * a RMS store and perform some read/write test.
 * The output is the result of three experiments:
 *
 * 1) read/write of 200 records of 10   bytes each (2k total)
 * 2) read/write of 20  records of 100  bytes each (2k total)
 * 3) read/write of 2   records of 1000 bytes each (2k total)
 *
 * The 6 times are presented in milliseconds. There are 3 pairs (W,R)(W,R)(W,R)
 * for the 3 experiments (in the above order)
 *
 */

public class RMSSpeed extends MIDlet implements CommandListener {
    
    //items
    private Command startCommand;
    private Command exitCommand;
    private TextField statusTF;
    
    public void startApp() {
        Display.getDisplay(this).setCurrent(getTheForm());
    }
    
    public void pauseApp() {
    }
    
    public void destroyApp(boolean unconditional) {
        notifyDestroyed();
    }
    
    /**
     * creates the form
     * @return the main form
     */
    private Form getTheForm() {
        
        Form f = new Form(" rms test ");
        startCommand = new Command("Start", Command.OK, 0);
        exitCommand = new Command("Exit", Command.EXIT, 0);
        f.setCommandListener(this);
        f.addCommand(startCommand);
        f.addCommand(exitCommand);
        f.append(getStatusTextField());
        return f;
    }
    
    /**
     * handle the command actions. if startCommand is selected, the test
     * is performed, if exitcommand is selected, the app is closed
     * 
     */
    public void commandAction(Command command, Displayable displayable) {
        
        if (command == startCommand) {
            startTest();
        }
        if (command == exitCommand) {
         destroyApp(false)   ;
        }
        
    }
    
    private TextField getStatusTextField() {
        if (statusTF == null) {
            statusTF=new TextField("Status" ,"",10000, TextField.UNEDITABLE);
        }
        return statusTF;
    }

    private class Record implements Serializable {
        private int size;
        String value;

        public Record(int size) {
            this.size = size;
            byte v[] = new byte[size];
            for(int i=0;i<size;++i) v[i] = 65;
            value = new String(v);
        }

        public void serialize(DataOutputStream dout) throws IOException {
            dout.writeUTF(value);
        }

        public void deserialize(DataInputStream din) throws IOException {
            value = din.readUTF();
        }
    }
    
    /**
     * run the test
     */
    private void startTest() {
        setStatus("Start!");
        try {

            ObjectStore store = new ObjectStore();
            try {
                RecordStore.deleteRecordStore("test");
            } catch (RecordStoreException ex) {
                // Ignore if it did not exist
            }

            store.create("test");

            // Write
            Record small = new Record(10);
            long before = System.currentTimeMillis();
            for(int i = 0; i < 200; ++i) {
                store.store(small);
            }
            long writeSmallTime = System.currentTimeMillis() - before;

            // Read
            int idx = store.getFirstIndex();
            before = System.currentTimeMillis();
            for(int i = 0; i < 200; ++i) {
                store.retrieve(idx, small);
                idx = store.getNextIndex();
            }
            long readSmallTime = System.currentTimeMillis() - before;

            store.close();
            RecordStore.deleteRecordStore("test");
            store.create("test");

            // Write
            Record big = new Record(100);
            before = System.currentTimeMillis();
            for(int i = 0; i < 20; ++i) {
                store.store(big);
            }
            long writeBigTime = System.currentTimeMillis() - before;

            // Read
            idx = store.getFirstIndex();
            before = System.currentTimeMillis();
            for(int i = 0; i < 20; ++i) {
                store.retrieve(idx, big);
                idx = store.getNextIndex();
            }
            long readBigTime = System.currentTimeMillis() - before;

            store.close();
            RecordStore.deleteRecordStore("test");
            store.create("test");

            // Write
            Record huge = new Record(1000);
            before = System.currentTimeMillis();
            for(int i = 0; i < 2; ++i) {
                store.store(huge);
            }
            long writeHugeTime = System.currentTimeMillis() - before;

            // Read
            idx = store.getFirstIndex();
            before = System.currentTimeMillis();
            for(int i = 0; i < 2; ++i) {
                store.retrieve(idx, huge);
                idx = store.getNextIndex();
            }
            long readHugeTime = System.currentTimeMillis() - before;

            store.close();
            RecordStore.deleteRecordStore("test");

            setStatus("200 records, 10 bytes: W " + writeSmallTime + ",R " + readSmallTime + "\n" +
                      "20 records, 100 bytes: W " + writeBigTime   + ",R " + readBigTime   + "\n" +
                      "2 records, 1000 bytes: W " + writeHugeTime  + ",R " + readHugeTime);
 
        } catch (MailException ex) {
            ex.printStackTrace();
            setStatus("Mailexception");
        } catch (RecordStoreException ex) {
            ex.printStackTrace();
            setStatus("RecordStoreException");
        } catch (IOException ex) {
            ex.printStackTrace();
            setStatus("IOException");
        }
        
     }
    
    private void setStatus(String s) {
        
        //error level to be sure to log it.
        Log.error("[RMSSpeed test] " + s);
        getStatusTextField().setString(s);
        
    }
    
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?