2011-04-03 32 views
1

我处于android的笔记应用程序的早期阶段,我希望有人能指出我存储笔记数据的一个很好的解决方案。基于文件的文件存储在android中

理想情况下,我希望有一个解决方案,其中:

  • 每个音符的文件是一个单独的文件(Dropbox的同步)
  • 的注意事项可以由多个页面
  • 注意页面可以有二进制数据(如图像)
  • 可以加载单个页面,而无需将整个文档解析到内存中
  • 线程安全性:多个读/写可以同时发生。

由于我没有很好的方法一次提取单个页面,所以XML已经不存在了(至少对于整个文件而言)。我考虑过使用zip文件,但是(特别是压缩时),我认为它们会卡住加载整个文件。

似乎应该有一个Java库在那里,但我的谷歌福是让我失望。我能想到的另一个选择是为每个音符创建一个单独的sqlite数据库。

有没有人知道这个问题的一个很好的解决方案?谢谢!

回答

2

好像关系数据库在这里工作。你只需要稍微玩一下模式。

也许使每个页面包括一个Pages表格,包括它所属文档的字段和它在文档中的顺序字段。页面也可以有一个二进制数据的字段,可能包含在另一个表中。如果文档本身有附加数据,也许你也有一个文档表。

我还没有在Android设备上使用SQLite事务,但它似乎是一个解决线程安全问题的好方法。

1

我会推荐使用SQLite来存储文档。最终,每次访问注释时,都会比试图处理文件I/O更容易。然后,当有人想上传到保管箱时,您即时生成文件并上传。至少有一个Notes表和一个页表是有意义的。这样,您可以单独加载每个页面,并且记事本无论如何都只是一个页面集合。此外,您可以将图像作为BLOBS存储在特定页面的数据库中。基本上,如果你只希望每页有一种类型的内容,那么你应该在页面表中,像id列和内容列。或者,如果您想要支持更复杂的内容,例如多种类型的内容,则需要将网页制作成其他内容的集合,例如“实体”。

IMO,关系数据库将成为完成您从特定页面读取而不必加载整个文件的要求的最简单方法。