abstractrecordstoreimpl.java
来自「This is a resource based on j2me embedde」· Java 代码 · 共 415 行 · 第 1/2 页
JAVA
415 行
/* * * * Portions Copyright 2000-2007 Sun Microsystems, Inc. All Rights * Reserved. Use is subject to license terms. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. * * 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 version 2 for more details (a copy is * included at /legal/license.txt). * * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. * * Copyright 2000 Motorola, Inc. All Rights Reserved. * This notice does not imply publication. */package com.sun.midp.rms;import java.io.IOException;import javax.microedition.rms.InvalidRecordIDException;import javax.microedition.rms.RecordStoreException;import javax.microedition.rms.RecordStoreFullException;import javax.microedition.rms.RecordStoreNotOpenException;/** * An interface for a record store implementation. */interface AbstractRecordStoreImpl { /* * The layout of the database file is as follows: * * Bytes - Usage * 00-07 - Signature = 'midp-rms' * 08-11 - Authmode and Writable state info * 12-15 - Next record ID to use (big endian) * 16-19 - Number of live records in the database (big endian) * 20-23 - Database "version" - a monotonically increasing revision * number (big endian) * 24-31 - Last modified (64-bit long, big endian, milliseconds since * jan 1970) * 32-35 - Size of Data storage (big endian) * 36-39 - Size of Free storage (big endian) * 40-xx - Record storage */ /** RS_SIGNATURE offset */ static final int RS0_SIGNATURE = 0; /** RS_AUTHMODE offset */ static final int RS1_AUTHMODE = 8; /** RS_NEXT_ID offset */ static final int RS2_NEXT_ID = 12; /** RS_NUM_LIVE offset */ static final int RS3_NUM_LIVE = 16; /** RS_VERSION offset */ static final int RS4_VERSION = 20; /** RS_LAST_MODIFIED offset */ static final int RS5_LAST_MODIFIED = 24; /** RS_START_OF_DATA offset */ static final int RS6_DATA_SIZE = 32; /** RS_START_OF_DATA offset */ static final int RS7_FREE_SIZE = 36; /** Size of the db header */ static final int DB_HEADER_SIZE = 40; /** pre initialized RecordStore header structure */ static final byte[] DB_SIGNATURE = { (byte)'m', (byte)'i', (byte)'d', (byte)'p', (byte)'-', (byte)'r', (byte)'m', (byte)'s' }; /** used to compact the records of the record store */ static final int COMPACT_BUFFER_SIZE = 1024; /** * Each block starts with an 8 byte header * First 4 bytes is the recordId or -1 if it is a free block * Second 4 bytes is the size of the data in the block * The data immediately follows the header * If the length of the data is not a multiple of 8 the data is padded * * Things that need to be done by the header code * */ /** Size of the block header */ static final int BLOCK_HEADER_SIZE = 8; /** * Internal indicator for AUTHMODE_ANY with read only access * AUTHMODE_ANY_RO has a value of 2. */ final static int AUTHMODE_ANY_RO = 2; /** * Changes the access mode for this RecordStore. The authorization * mode choices are: * * <ul> * <li><code>AUTHMODE_PRIVATE</code> - Only allows the MIDlet * suite that created the RecordStore to access it. This * case behaves identically to * <code>openRecordStore(recordStoreName, * createIfNecessary)</code>.</li> * <li><code>AUTHMODE_ANY</code> - Allows any MIDlet to access the * RecordStore. Note that this makes your recordStore * accessible by any other MIDlet on the device. This * could have privacy and security issues depending on * the data being shared. Please use carefully.</li> * </ul> * * <p>The owning MIDlet suite may always access the RecordStore and * always has access to write and update the store. Only the * owning MIDlet suite can change the mode of a RecordStore.</p> * * @param authmode the mode under which to check or create access. * Must be one of AUTHMODE_PRIVATE or AUTHMODE_ANY. * @param writable true if the RecordStore is to be writable by * other MIDlet suites that are granted access * * @exception RecordStoreException if a record store-related * exception occurred * @exception SecurityException if this MIDlet Suite is not * allowed to change the mode of the RecordStore * @exception IllegalArgumentException if authmode is invalid */ void setMode(int authmode, boolean writable) throws RecordStoreException; /** * This method is called when the MIDlet requests to have the * record store closed. Note that the record store will not * actually be closed until closeRecordStore() is called as many * times as openRecordStore() was called. In other words, the * MIDlet needs to make a balanced number of close calls as open * calls before the record store is closed. * * <p>When the record store is closed, all listeners are removed * and all RecordEnumerations associated with it become invalid. * If the MIDlet attempts to perform * operations on the RecordStore object after it has been closed, * the methods will throw a RecordStoreNotOpenException. * * @exception RecordStoreNotOpenException if the record store is * not open * @exception RecordStoreException if a different record * store-related exception occurred */ void closeRecordStore() throws RecordStoreNotOpenException, RecordStoreException; /** * Get the authorization mode for this record store. * * @return authorization mode */ int getAuthMode(); /** * Each time a record store is modified (by * <code>addRecord</code>, <code>setRecord</code>, or * <code>deleteRecord</code> methods) its <em>version</em> is * incremented. This can be used by MIDlets to quickly tell if * anything has been modified. * * The initial version number is implementation dependent. * The increment is a positive integer greater than 0. * The version number increases only when the RecordStore is updated. * * The increment value need not be constant and may vary with each * update. * * @return the current record store version */ int getVersion() throws RecordStoreNotOpenException; /** * Returns the number of records currently in the record store. * * @return the number of records currently in the record store */ int getNumRecords(); /** * Returns the amount of space, in bytes, that the record store * occupies. The size returned includes any overhead associated
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?