writing many java objects to a single file

2020-02-09 09:29发布

how can I write many serializable objects to a single file and then read a few of the objects as and when needed?

5条回答
够拽才男人
2楼-- · 2020-02-09 09:38

Make Object[] for storing your objects. It worked for me.

查看更多
爱情/是我丢掉的垃圾
3楼-- · 2020-02-09 09:41

I'd use a Flat File Database (e. g. Berkeley DB Java Edition). Just write your nodes as rows in a table like:

Node
----
id
value
parent_id
查看更多
4楼-- · 2020-02-09 09:52

You'd have to implement the indexing aspect yourself, but otherwise this could be done. When you serialize an object you essentially get back an OutputStream, which you can point to wherever you want. Storing multiple objects into a file this way would be straightforward.

The tough part comes when you want to read "a few" objects back. How are you going to know how to seek to the position in the file that contains the specific object you want? If you're always reading objects back in the same order you wrote them, from the start of the file onwards, this will not be a problem. But if you want to have random access to objects in the "middle" of the stream, you're going to have to come up with some way to determine the byte offset of the specific object you're interested in.

(This method would have nothing to do with synchronization or even Java per se; you've got to design a scheme that will fit with your requirements and environment.)

查看更多
在下西门庆
5楼-- · 2020-02-09 09:53

To read more Objects from file:


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;
    }
}
查看更多
别忘想泡老子
6楼-- · 2020-02-09 09:54

The writing part is easy. You just have to remember that you have to write all objects 'at once'. You can't create a file with serialized objects, close it and open it again to append more objects. If you try it, you'll get error messages on reading.

For deserializing, I think you have to process the complete file and keep the objects you're interested in. The others will be created but collected by the gc on the next occasion.

查看更多
登录 后发表回答