我被分配了在“高级”Java课程中创建NIO持久数组的任务。这个问题不是'how'这样做,而是'what'是由“NIO Persistent”暗示的。这对我来说是个新概念;到目前为止,我理解基本上这只是意味着不是在代码中动态存储典型数组中的信息,而是将数组的信息以字节的形式存储在预定大小的块中。我感到困惑的是你如何从你想要存储的信息中获取字节,然后如何通过Java的NIO将这些字节写入文件?
TL; DR - 简而言之,有人可以解释Java NIO持久阵列吗?我该如何从头开始构建一个?
感谢您提前发表任何意见!
编辑:这是分配说明,逐字逐句:
目标
熟悉Java的NIO API。
要求
使用Java的NIO创建PersistentArray类。这堂课应该 支持以下方法:
static void create(String fileName,int bufferSize) - 创建一个空的 持久数组
static void delete(String fileName) - 删除持久数组
PersistentArray open(String fileName) - 打开与之关联的文件 持久化数组并为gets和准备持久数组 放。
void put(int bufferID,Buffer buffer) - 将缓冲区存储在 bufferID的位置(请注意,缓冲区大小必须与 创建数组时使用的大小。)
Buffer get(int bufferID) - 给定缓冲区ID,检索缓冲区 先前存储在与bufferID相关的位置。
int getNextID() - 返回超出以前使用的最大ID的值 存储缓冲区。
void close() - 关闭与持久数组关联的文件
此外,创建一个JUnit测试,显示所有方法都按预期运行。
与教师一起检查您的工作。
答案 0 :(得分:2)
我只能假设他/她在谈论内存映射文件。使用可以使用RandomAccessFile创建MappedByteBuffer,您可以像数组一样随机访问。您对ByteBuffer所做的更改将保留。
答案 1 :(得分:1)
什么:
没有像“NIO持久阵列”这样的东西。教师希望您熟悉NIO API(因为它比旧的IO API更好,更快)。
现在在赋值的上下文中,您需要实现符合教师指定的规范的类。没有花哨的东西,只需使用nio实现一个“持久化”数据(在你的情况下是一个数组)的类。
这篇文章可能会对你有所帮助。 File I/O: old I/O or NIO. Which is better?
TL; DR:NIO持久性没有特殊意义。只需创建一个 数组不在内存中,但也使用NIO保留其内容。
如何:
现在,它可以通过多种方式实现,Peter的答案非常好,建议使用RandomAccessFile。