【问题标题】:File random access in J2MEJ2ME 中的文件随机访问
【发布时间】:2010-09-25 19:57:44
【问题描述】:

J2ME 是否有类似于RandomAccessFile 的类,或者有什么方法可以模拟这种特殊的(随机访问)功能?

问题是这样的:我有一个相当大的二进制数据文件(约 600 KB),并想创建一个移动应用程序来使用该数据。该数据的格式是自制的,包含许多索引块和数据块。在其他平台(如 PHP 或 C)上读取数据通常是这样的:

  1. 读取 2 个字节作为索引键 (K),另外 2 个字节作为索引值 (V) 用于所需的数据类型
  2. 从文件开头跳过 V 字节以查找索引键 K 的数据开始处的文件位置
  3. 读取数据
  4. 利润:)

这在程序流程中发生了很多次。

嗯,我正在研究在 J2ME 上做同样事情的可能性,虽然我承认我对整个 Java 事物很陌生,但我似乎无法找到除 InputStream 之外的任何东西( DataInputStream) 类没有我需要的基本查找/跳转到字节/返回位置功能。

那么,我的机会有多大?

【问题讨论】:

    标签: java-me random-access


    【解决方案1】:

    你应该有这样的东西

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

    我不喜欢使用 marke/reset 方法,我认为最好保存 val 位置的偏移量而不是文件开头的偏移量,这样您就可以跳过这些方法。我认为他们在某些设备上存在一些问题。

    另外注意,我不建议打开一个 600 KB 的文件,它会在许多低端设备上崩溃,你应该将此文件拆分为多个文件。

    【讨论】:

    • 您好,感谢您的回答!但是,如何有效地寻找低于当前位置的位置呢? (比如说,你刚刚读取了位置 100 的一个字节,现在你需要一个位置 50 的字节)?
    • 不幸的是,在这种情况下,除了使用标记/重置方法之外别无他法。
    • 我想通过在j2me中的文件中提供偏移量来随机写入。有什么办法吗?
    猜你喜欢
    • 1970-01-01
    • 2010-09-17
    • 2015-01-10
    • 1970-01-01
    • 2019-01-29
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多