我需要“序列化”一个大的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()
}