2010-09-25 23 views
2

est-ce que J2ME a quelque chose de similaire à la classe RandomAccessFile, ou est-il possible d'émuler cette fonctionnalité particulière (accès aléatoire)?L'accès aléatoire au fichier dans J2ME

Le problème est le suivant: j'ai un fichier de données binaires assez volumineux (~ 600 Ko) et je voudrais créer une application mobile pour utiliser ces données. Le format de ces données est fait maison et contient de nombreux blocs d'index et de données. La lecture des données sur d'autres plates-formes (comme PHP ou C) va généralement comme ceci:

  1. Lire 2 octets pour clé d'index (K), un autre 2 pour la valeur d'index (V) pour le type de données nécessaires
  2. Sauter V octets à partir du début du fichier à rechercher dans une position de fichier ou les données pour l'indice clé K commence
  3. Lire les données
  4. Profit :)

Cela se produit plusieurs fois pendant le déroulement du programme. Um, et j'étudie la possibilité de faire exactement la même chose sur J2ME, et même si j'admets que je suis tout nouveau dans l'univers Java, je n'arrive pas à trouver autre chose que InputStream (DataInputStream) les classes qui n'ont pas les fonctions de recherche/saut de base vers octet/retour dont j'ai besoin.

Alors, quelles sont mes chances?

Répondre

2

Vous devriez avoir quelque chose comme ça

try { 
    DataInputStream di = new DataInputStream(is); 
    di.marke(9999); 
    short key = di.readShort(); 
    short val = di.readShort(); 
    di.reset(); 
    di.skip(val); 
    byte[] b= new byte[255]; 
    di.read(b); 
}catch(Exception ex) { 
    ex.printStackTrace(); 
} 

Je préfère ne pas utiliser les méthodes de Marke/reset, je pense qu'il est préférable d'enregistrer le décalage par rapport à l'emplacement de val pas dès le début du fichier afin que vous peut sauter ces méthodes. Je pense qu'ils ont des problèmes sur certains appareils.

Une note de plus, je ne recommande pas d'ouvrir un fichier de 600 Ko, il va planter l'application sur de nombreux appareils bas de gamme, vous devez fractionner ce fichier en plusieurs fichiers.

+0

Salut, merci pour votre réponse! Mais alors, comment chercher efficacement à la position qui est inférieure à la position actuelle? (Dis, vous venez de lire un octet à la position 100, et maintenant vous avez besoin d'un octet à la position 50)? – Linas

+0

Malheureusement, il n'y a pas d'autre moyen que d'utiliser les méthodes marke/reset dans ce cas. –

+0

Je veux écrire à des endroits aléatoires en fournissant des offsets dans le fichier en j2me.Est-il un moyen? – CuriousCase