Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将多个java对象写入单个文件_Java_Serialization - Fatal编程技术网

将多个java对象写入单个文件

将多个java对象写入单个文件,java,serialization,Java,Serialization,如何将多个可序列化对象写入单个文件,然后在需要时读取一些对象?您必须自己实现索引功能,否则就可以实现。当您序列化一个对象时,实际上会返回一个OutputStream,您可以将其指向任何您想要的地方。以这种方式将多个对象存储到一个文件中是很简单的 当你想读回“一些”物体时,困难的部分就来了。您将如何知道如何查找文件中包含所需特定对象的位置?如果您总是按照写入对象的相同顺序读取对象,从文件开始,这将不会是一个问题。但是,如果您想随机访问流“中间”的对象,您必须想出一些方法来确定您感兴趣的特定对象的字

如何将多个可序列化对象写入单个文件,然后在需要时读取一些对象?

您必须自己实现索引功能,否则就可以实现。当您序列化一个对象时,实际上会返回一个
OutputStream
,您可以将其指向任何您想要的地方。以这种方式将多个对象存储到一个文件中是很简单的

当你想读回“一些”物体时,困难的部分就来了。您将如何知道如何查找文件中包含所需特定对象的位置?如果您总是按照写入对象的相同顺序读取对象,从文件开始,这将不会是一个问题。但是,如果您想随机访问流“中间”的对象,您必须想出一些方法来确定您感兴趣的特定对象的字节偏移量


(这种方法与同步甚至与Java本身无关;您必须设计一种适合您的需求和环境的方案。)

编写部分很简单。您只需要记住,您必须“一次”写入所有对象。无法创建包含序列化对象的文件,请关闭该文件,然后再次打开以附加更多对象。如果您尝试,您将在阅读时收到错误消息

对于反序列化,我认为您必须处理完整的文件并保留您感兴趣的对象。其他的将被创建,但在下一次由gc收集。

我将使用一个(例如)。只需将节点作为行写入表中,如下所示:

Node
----
id
value
parent_id

使
对象[]
用于存储对象。它对我很有用。

从文件中读取更多对象:



完整的问题是:我必须实现一个B-树。我将为每个“节点”创建一个对象,并将其存储在文件中。现在,当我稍后使用b-树时,我希望获得根并只读取所需的节点。您还没有说为什么要这样做。我提出这个问题的原因是,您可能会错误地认为这在某种程度上更快或更高效,而这很可能是不必要的编译。如果你有几个100MB的数据,它可能开始值得,否则只需将整个结构读入内存并访问它。例如,我写
1
2
3
4
。我需要把它们读成
4
3
2
1
?在
1
2
3
4
中再次阅读它们对我来说没有意义。你能澄清一下吗?
public class ReadObjectFromFile {

    public static Object[] readObject() throws IOException {
        Object[] list = null;

        try {
            byte[] bytes = Files.readAllBytes(Paths.get("src/objectFile.txt"));
            ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes));
            list = (Object[]) ois.readObject();
            ois.close();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        return list;
    }
}