2011-10-23 68 views
2

我已经分配了在“高级”Java课程中创建NIO持久性阵列的任务。这个问题不是那么多,'如何'要做到这一点,但'什么'暗示了“NIO持久”。对我来说这是一个新概念;到目前为止我明白,基本上这只是意味着不是将代码中的信息动态存储在典型数组中,而是将数组的信息以字节的形式存储在磁盘上,并以预定义的大小块存储。我感到困惑的是你如何从你试图存储的信息中获得字节,然后如何通过Java的NIO将这些字节写入文件?NIO持久性阵列:Java

TL; DR - 有人可以解释一个Java NIO持久性阵列简而言之?我应该如何着手从头开始构建一个?

感谢您提前发表任何评论!

编辑:这里是委派描述,一个字一个字:

目的

熟悉Java的NIO API。

要求

使用Java的NIO创建一个PersistentArray类。该类应该 支持以下方法:

静态无效创建(字符串文件名,INT缓冲区大小) - 创建一个空的 持久阵列

静态无效删除(字符串文件名) - 删除持久阵列

PersistentArray open(String fileName) - 打开与 持久数组关联的文件,并为gets和 puts准备持久数组。 (int bufferID,Buffer buffer) - 将缓冲区存储在 bufferID的位置(请注意缓冲区大小必须与创建数组时使用的大小 相同)。

Buffer get(int bufferID) - 给定缓冲区ID,检索缓冲区 ,该缓冲区先前存储在与bufferID相关联的位置。

int getNextID() - 返回一个超过存储缓冲区时使用的最大ID的最大值 。

空隙接近() - 关闭与持久性阵列

而且相关联的文件,创建示出所有的方法表现为预期JUnit测试。

与老师复习您的工作。

回答

1

什么:
有没有这样的事情,像“NIO持久阵列”。教师希望你熟悉NIO API(因为它比旧的IO API更好,更快)。

现在在分配的上下文中,您需要实现这个遵守教师指定的规范的类。没有花哨的东西,只是实现一个“坚持”的数据(在你的情况下的数组)到一个文件使用nio。

这篇文章可能对你有所帮助。 File I/O: old I/O or NIO. Which is better?

TL; DR:NIO持久性没有特别的意义。只需创建一个不在内存中的 数组,但也会使用NIO保留其内容。

如何:
现在,它可以以多种方式实现,则建议在何处使用RandomAccessFile的彼得的答案是相当不错的。

+0

感谢您的洞察力,我会读一下NIO:] –

+0

开始代码我会说,你会了解更多。代码*是*设计。 – zengr

2

我只能假设他/她在谈论内存映射文件。使用可以使用RandomAccessFile创建一个MappedByteBuffer,您可以像数组一样随机访问它。您对ByteBuffer所做的更改将持续存在。

+0

我编辑了我的原始提交内容,以包含作业的确切用词。 –

+0

所以你想包装一个MappedByteBuffer。 ;) –