File random access in J2ME
Asked Answered
T

1

2

does J2ME have something similar to RandomAccessFile class, or is there any way to emulate this particular (random access) functionality?

The problem is this: I have a rather large binary data file (~600 KB) and would like to create a mobile application for using that data. Format of that data is home-made and contains many index blocks and data blocks. Reading the data on other platforms (like PHP or C) usually goes like this:

  1. Read 2 bytes for index key (K), another 2 for index value (V) for the data type needed
  2. Skip V bytes from the start of the file to seek to a file position there the data for index key K starts
  3. Read the data
  4. Profit :)

This happens many times during the program flow.

Um, and I'm investigating possibility of doing the very same on J2ME, and while I admit I'm quite new to the whole Java thing, I can't seem to be able to find anything beyond InputStream (DataInputStream) classes which don't have the basic seeking/skipping to byte/returning position functions I need.

So, what are my chances?

Transistorize answered 25/9, 2010 at 19:57 Comment(0)
E
2

You should have something like this

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();
}

I prefer not to use the marke/reset methods, I think it is better to save the offset from the val location not from the start of the file so you can skip these methods. I think they have som issues on some devices.

One more note, I don't recommend to open a 600 KB file, it will crash the application on many low end devices, you should split this file to multiple files.

Ecology answered 25/9, 2010 at 20:23 Comment(3)
Hi, thanks for your answer! But then, how to you effectively seek to the position that is lower than the current position? (Say, you just read a byte at position 100, and now you need a byte at position 50)?Transistorize
unfortunately there is no way other than using marke/reset methods in this case.Ecology
I want to write at random places by providing offsets in file in j2me.Is there any way?Bottle

© 2022 - 2024 — McMap. All rights reserved.