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 + -
显示快捷键?