J2ME 中的文件随机访问

Posted

技术标签:

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

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

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

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

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

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

那么,我的机会有多大?

【问题讨论】:

【参考方案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中的文件中提供偏移量来随机写入。有什么办法吗?

以上是关于J2ME 中的文件随机访问的主要内容,如果未能解决你的问题,请参考以下文章

在 Java ME/J2ME 中生成随机十六进制字符串(长度为 50)

IO---随机访问文件流

《七》随机访问文件流

详解 随机访问流

将类数据存储在随机访问文件中的最佳实践

.NET C# - 文本文件中的随机访问 - 没有简单的方法?