繁体   English   中英

Java读取和写入文件的对象

[英]Java reading and writing objects to a file

我的任务是创建一个类(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() {

}

}

提前感谢您的所有帮助!

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

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

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

除了PathFiles的琐碎和冗余使用之外,这里根本没有NIO,所以很难看出你的问题实际上是什么。 不过我会评论如下:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM