如何使用Codename one Storage?

Nik*_*hil 3 lwuit java-me codenameone

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

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

我不明白Storage类如何在Codename中工作,而codename的文档也没有任何关系.

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

- >在J2ME中RecordStore,您将记录像表一样捆绑在一起.每一行,对应一条记录.每条记录都有唯一的记录ID,您可以使用此记录ID访问记录.每条记录都可以存储一些数据.

这如何映射到Storage类?

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

文件说:

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

- >在LWUIT中,它就像Storage.init(storageName).; 但是,没有一个代号为init的init!如何在Codename中打开存储?

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

Sha*_*mog 6

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

在RMS上运行时,此文件系统抽象将无缝地映射到RMS数据库.

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

Storage类有几种方法:

InputStream createInputStream(String name)
Run Code Online (Sandbox Code Playgroud)

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

OutputStream    createOutputStream(String name)
Run Code Online (Sandbox Code Playgroud)

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

boolean     exists(String name)
Run Code Online (Sandbox Code Playgroud)

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

String[]    listEntries()
Run Code Online (Sandbox Code Playgroud)

列出存储文件的名称

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

 Object     readObject(String name)
Run Code Online (Sandbox Code Playgroud)

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

 boolean    writeObject(String name, Object o)
Run Code Online (Sandbox Code Playgroud)

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

所以要模拟像byte []存储这样的东西,你可以这样做:

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

然后把它读作:

Vector p = (Vector)Storage.getInstance().read("myStore");
// p will be null if nothing was written
Run Code Online (Sandbox Code Playgroud)