android中基于文件的文档存储

时间:2011-04-03 02:22:07

标签: java android sqlite document document-storage

我正处于Android注释应用程序的早期阶段,我希望有人能指出我存储笔记数据的好方法。

理想情况下,我希望找到一个解决方案:

  • 每个便笺文档都是一个单独的文件(用于收集箱同步)
  • 笔记可以由多个页面组成
  • 注意页面可以包含二进制数据(例如图像)
  • 无需将整个文档解析到内存中即可加载单个页面
  • 线程安全:可以同时进行多次读/写。

XML已经出局(至少对整个文件而言),因为我没有一次提取单个页面的好方法。我考虑使用zip文件,但(特别是在压缩时)我认为它们也会被卡在整个文件中。

似乎应该有一个Java库可以做到这一点,但是我的google-fu让我失望了。我能想到的唯一另一种选择是为每个音符创建一个单独的sqlite数据库。

有人知道这个问题的解决方案吗?谢谢!

2 个答案:

答案 0 :(得分:2)

似乎关系数据库可以在这里工作。你只需要稍微使用一下架构。

也许为每个页面创建一个Pages表,包括,例如,它所属的文档的字段以及文档中其顺序的字段。 Pages还可以包含二进制数据字段,该字段可能包含在另一个表中。如果文档本身有其他数据,也许您也有一个文档表。

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

答案 1 :(得分:1)

我建议使用SQLite来存储文档。最终,每次访问笔记时,尝试处理文件I / O都会更容易。然后,当有人想要上传到Dropbox时,您可以动态生成文件并上传它。至少有一个Notes表和一个pages表是有意义的。这样,您可以单独加载每个页面,而注释只是一组页面。此外,您可以将图像作为BLOBS存储在特定页面的数据库中。基本上,如果您每页只需要一种类型的内容,那么您将在页面表中拥有类似于id列和内容列的内容。或者,如果您想支持更复杂的内容,例如多种类型的内容,那么您需要使您的页面成为其他内容的集合,例如“实体”。

IMO,关系数据库将是满足您从特定页面阅读的最简单方法,而无需加载整个文件。