0

我的任务是创建一个类 (RandomAccessObjectFile),它提供对象的读取和写入以及在文件中的查找。这是我第一次使用 Java File NIO,并希望确保我正确掌握它。以下是我在课堂上必须具备的方法,我正在寻求一些帮助和更多了解如何处理这门课的其余部分。

public class RandomAccessObjectFile {

RandomAccessFile raFile;
private RandomAccessObjectFile(String fileName) throws FileNotFoundException {
    raFile = new RandomAccessFile(new File(fileName), "rw");
}

static void create(String fileName) throws IOException {
    Path createTarget = Paths.get(fileName);
    Files.createFile(createTarget);
}

static void delete(String fileName) throws IOException {
    Path deleteTarget = Paths.get(fileName);
    Files.delete(deleteTarget);
}

static RandomAccessObjectFile open(String fileName) {

}

<T> void write(T obj) {
}

<T> T read() {

}

void seek(long location) {
}

long length() {

}

}

提前感谢您的所有帮助!

4

2 回答 2

2

对于java.nio包的背景,您可以从java 教程开始。 要将对象序列化为文件,我使用ObjectOutputStream取得了成功。我认为您可能需要进一步说明 seek 方法应该做什么。长输入是文件位置吗?这似乎是一件奇怪的事情,因为写入文件的对象将占用文件中不同数量的空间。seek 方法的大多数输入值都是无效的,因为文件中的特定位置可能不代表对象序列化的开始。但如果这就是输入参数的解释方式,那么我认为如果输入值不代表对象的开始,该方法应该抛出 IllegalArgumentException。

这个类的用户如何知道如何寻找一个特定的对象?

也许您还应该存储一些索引数据。也许写入文件的每个对象都需要有一些唯一的 ID 字段。然后创建一个映射,将这些 ID 映射到文件中的位置。然后可以使用此映射快速跳转到正确的文件位置以读取数据。只要文件中的数据不需要更改,这种方法应该可以很好地工作。以这种方式将新对象添加到文件中应该可以正常工作,但是修改对象或从文件中间删除对象将需要更多工作。

于 2012-11-28T03:29:47.010 回答
0

Path除了对 and 的琐碎和冗余使用之外,这里根本没有 NIO Files,因此很难看出您的问题实际上是关于什么的。但是我会评论如下:

  1. create()方法是多余的。构建类的实例时将创建目标文件,否则将引发异常。

  2. delete()方法是多余的,File.delete()并且Files.delete()已经存在。

  3. 整个任务都是徒劳的。对象流不是随机访问。它们是严格的流。除非您知道去哪里寻找,否则您无法寻找它们,并且没有提供任何 API 来获取该信息。

于 2012-12-04T09:01:24.600 回答