我需要“序列化”一个大的BlockingQueue(sizeof 10_000),其中包含我的爬虫的域名(Strings(Objects))-例如,如果我停止停止它,或者它会意外发生-这将有助于不对已经存在的爬虫进行爬网完成。最好的方法是什么?在NET中,我已将二进制序列化用于此类任务(例如,像protobuf)(速度更快,序列化的信息可视化对于理解不是那么关键-不必要的XML View )。但是,如何在Java中执行此操作?您可以作为样本引用吗?

最佳答案

BlockingQueue只是一个接口(interface),而不是具体的类型。您序列化/反序列化具有具体类型的实例。这取决于您具有的实例的动态类型是否实现Serializable
ArrayBlockingQueue实现Serializable,这意味着您可以简单地序列化它,并使用ObjectInputStream/ObjectOutputStream反序列化它:

保存ArrayBlockingQueue:

ArrayBlockingQueue queue = new ArrayBlockingQueue(10);

try (ObjectOutputStream out = new ObjectOutputStream(
        new FileOutputStream("queue.data"))) {
    out.writeObject(queue);
}

读取持久的ArrayBlockingQueue:
ArrayBlockingQueue queue = null;

try (ObjectInputStream in = new ObjectInputStream (
        new FileInputStream("queue.data"))) {
    queue = in.readObject()
}

10-05 17:39