#ff0000 27  2005 . - #000655   Record Management System  MIDlet-
#def Mobile Information Device Profile (MIDP)           .     Record Management System (RMS).   RMS   ,        .   RMS         (MIDlet suite -       jar .),      RMS     ,   . 

  ,  RMS    "record store". Record store -    -    .       . RMS      .     . RMS      ,       "" . 

 record store   javax.microedition.rms.RecordStore.     RecordStore    openRecordStore: 

import javax.microedition.rms.*;

RecordStore rs = null;

try {
    rs = RecordStore.openRecordStore( "mydata", false );
}
catch( RecordStoreNotFoundException e ){
    //  
}
catch( RecordStoreException e ){
    // -  
}

  openRecordStore -   record store.       32 .         . (,     ,           record store.)   ,     record store,  record store     ,      RecordStoreNotFoundException. RecordStoreNotFoundException   RecordStoreException -      RMS. RecordStoreException ,  record store        ,    . 

      record store    RecordStore.           record store,             RecordStore. 

 ,  record store ,    ,   closeRecordStore : 

try {
    rs.closeRecordStore();
}
catch( RecordStoreNotOpenException e ){
    //  
}
catch( RecordStoreException e ){
    // -  
}

 record store     ,      closeRecordStore  ,   openRecordStore. 

 ,      record store,   addRecord: 

byte[] data = new byte[2];

data[0] = 0;
data[1] = 1;

try {
    int id = rs.addRecord( data, 0, data.length );
}
catch( RecordStoreFullException e ){
    //     
}
catch( RecordStoreNotOpenException e ){
    // record store  
}
catch( RecordStoreException e ){
    //  
}

    addRecord     .   (ID)   1        .  ,        ,   getNextRecordID. 
    ,   deleteRecord.     ID  . 

 getRecord    .     :    ID        ,   ;  -       : 

byte[] data = new byte[100];
int id = ....; // ID 

try {
    int numBytes = rs.getRecord( id, data, 0 );
}
catch( ArrayIndexOutOfBoundsException e ){
    //      
}
catch( InvalidRecordIDException e ){
    //    ID  
}
catch( RecordStoreNotOpenException e ){
    // record store  
} 
catch( RecordStoreException e ){
    //  
}

   - ID ,  - ,     ;  -      .      ,     (   getRecordSize,    ).    ,             . 

  ,   setRecord: 

byte[] data = new byte[3];
int id = ....; // get the ID from somewhere

data[0] = 0;
data[1] = 1;
data[2] = 2;

try {
    rs.setRecord( id, data, 0, data.length );
}
catch( ArrayIndexOutOfBoundsException e ){
    //      
}
catch( InvalidRecordIDException e ){
    //    ID  
}
catch( RecordStoreNotOpenException e ){
    // record store  
} 
catch( RecordStoreException e ){
    //  
}


   ,         .        . 

,     ,     RMS,    .   ,     record store: 

import java.io.*;
import javax.microedition.midlet.*;
import javax.microedition.rms.*;

public class TestStore extends MIDlet {

    static final String DBNAME = "mydata";

    public TestStore() {

        RecordStore rs = null;

        //     .
        // MIDlet-,     record store...

        try {
            RecordStore.deleteRecordStore( DBNAME );
        }
        catch( Exception e ){
            // ignore any errors...
        }

        //        

        try {
            rs = RecordStore.openRecordStore( DBNAME, 
                          true );

            byte[] data1 = "  ".getBytes();
            byte[] data2 = " ".getBytes();
            byte[] data3 = "  ".getBytes();

            data3[0] = 0;
            data3[data3.length-1] = (byte) -1;

            rs.addRecord( data1, 0, data1.length );
            rs.addRecord( data2, 0, data2.length );
            rs.addRecord( data3, 0, data3.length );

            dumpRecordStore( rs, System.out );

            rs.closeRecordStore();
        }
        catch( RecordStoreException e ){
            System.out.println( e );
        }

        notifyDestroyed();
    }

    public void dumpRecordStore( RecordStore rs, 
                     PrintStream out )
    {
        if( rs == null ) return;

        StringBuffer hexLine = new StringBuffer();
        StringBuffer charLine = new StringBuffer();

        try {
            int lastID = rs.getNextRecordID();
            byte[] data = new byte[100];
            int size;

            for( int i = 1; i < lastid; ++i ){
                try {
                    size = rs.getrecordsize( i );
                    if( size > data.length ){
                        data = new byte[ size * 2 ];
                    }

                    out.println( " " + i + "  " + size );

                    rs.getRecord( i, data, 0 );
                    dumpRecord( data, size, out, 
                hexLine, charLine, 16 );

                    out.println( "" );
                }
                catch( InvalidRecordIDException e ){
                    continue;
                }
            }
        }
        catch( RecordStoreException e ){
            out.println( "   record store: " + e );
        }
    }
 
    private void dumpRecord( byte[] data, int size,
                             PrintStream out,
                             StringBuffer hexLine,
                             StringBuffer charLine,
                             int maxLen )
    {
        if( size == 0 ) return;

        hexLine.setLength( 0 );
        charLine.setLength( 0 );

        int count = 0;

        for( int i = 0; i < size; ++i ){
            char b = (char) ( data[i] & 0xff );

            if( b < 0x10 ){
                hexline.append( '0' );
            }

            hexline.append( integer.tohexstring( b ) );
            hexline.append( ' ' );

            if( ( b >= 32 && b <= 127 ) ||
                character.isdigit( b ) ||
                character.islowercase( b ) ||
                character.isuppercase( b ) ){
                charline.append( (char) b );
            } else {
                charline.append( '.' );
            }

            if( ++count >= maxLen || i == size-1 ){
                while( count++ < maxlen ){
                hexline.append( " " );
                }

                hexline.append( ' ' );
                hexline.append( charline.tostring() );

                out.println( hexline.tostring() );
  
                hexline.setlength( 0 );
                charline.setlength( 0 );
                count = 0;
            }
        }
    }

    public void destroyapp( boolean unconditional ) {
    }

    public void startapp() {
    }

    public void pauseapp() {
    }
}