4

我正在尝试将我的 LWUIT 应用程序移植到Codename one

我在 LWUIT 中使用了 RMS,现在显然我必须将其转换为存储。

我不明白存储类在代号一中是如何工作的,代号一的文档也没有任何内容。

1)存储文件的结构是什么?

--> 在 J2MERecordStore中,记录像一张表一样聚集在一起。每一行,对应一个记录。每条记录都有一个唯一的记录 ID,您可以使用此记录 ID 访问记录。每条记录都可以存储一些数据。

这如何映射到存储类?

2)我想在我的存储中存储一些记录,我该怎么做?

文档说:

static Storage  getInstance() 
          Returns the storage instance or null if the storage wasn't initialized using a call to init(String) first.

--> 在 LWUIT 中,它类似于 Storage.init(storageName)。; 但是代号一中没有init!!!!如何在代号一中打开存储?

3)如果我尝试打开一个不存在的存储文件,会发生什么(RMS 给出异常)?

4

1 回答 1

7

考虑存储的最简单方法是作为平面文件系统(没有目录/文件夹)。

在 RMS 之上运行时,此文件系统抽象会为您无缝映射到 RMS 数据库。

请注意,init()对于存储在 Codename One 中不再需要,在 LWUIT 下它只执行基本初始化并且名称通常被忽略。

Storage 类有几个方法:

InputStream createInputStream(String name)

为给定的存储源文件创建一个输入流

OutputStream    createOutputStream(String name)

使用给定名称创建到存储的输出流

boolean     exists(String name)

如果给定的存储文件存在,则返回 true

String[]    listEntries()

列出存储文件的名称

您可以使用它们来存储和检查数据是否存在。但是,您也可以使用以下两种方法在不使用输入/输出流的情况下将复杂对象存储在存储中:

 Object     readObject(String name)

从存储中读取对象,如果对象不存在则返回 null

 boolean    writeObject(String name, Object o)

假设给定对象是可外部化类型或受支持的类型之一,则将给定对象写入存储

因此,要模拟类似 byte[] 存储的内容,您可以执行以下操作:

Vector p = new Vector();
byte[] myData = ...;
p.addElement(myData);
p.addElement(additionalData);
Storage.getInstance().writeObject("myStore", p);

然后把它读成:

Vector p = (Vector)Storage.getInstance().read("myStore");
// p will be null if nothing was written
于 2012-06-30T17:57:38.683 回答