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