Java文件续传、断点处理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/c13232906050/article/details/52205374

BpPC(Breakpoint Producer-Consumer)

项目介绍:

实现文件读取的断点记录,下次在断点位置继续读取。
解决读取文件时突然中断的问题,如断电导致电脑关机。

设计模式:

Created with Raphaël 2.1.0 输入文件:File 生产者:BpProducer 输入队列:Queue 中间消费者:MidConsumer 输出队列:Queue 写出消费者:BpConsumer 输出文件:File

项目组成:

archon.bppc.model.
    BpContext: 上下文对象,保存输入输出文件、队列以及常量配置类BpProperties等;
    BpObject: 输入输出队列的通用数据类型;
    BpProperties: 常量配置类。

archon.bppc.pruducer.
    abstract BpProducer: 生产者;
    StringBpProducer: String类型的生产者。

archon.bppc.consumer.
    abstract BpConsumer: 写出消费者;
    abstract MidConsumer: 中间消费者;
    StringBpConsumer: String类型的写出消费者。

archon.bppc.controller.
    final BpController: 主控类,控制生产到消费的全过程。

archon.bppc.delegate: 代理接口。

archon.bppc.example: 演示程序。

功能:

串行处理多目录下的多文件,但不包含子目录。每个目录都需要单独配置。(可以实现并行处理)

简单使用:

    public final class StringExample {

        // 准备好输入目录、输出目录以及临时目录。
        private static final String IN_DIR = "F:/bppc/in/";
        private static final String OUT_DIR = "F:/bppc/out/";
        private static final String TMP_DIR = "F:/bppc/tmp/";

        public static void main(String[] args) {

            // 设置常量配置类。
            BpProperties bpProperties = BpProperties.getDefaultBpProperties();
            bpProperties.setInDirPath(IN_DIR);
            bpProperties.setOutDirPath(OUT_DIR);
            bpProperties.setTmpDirPath(TMP_DIR);

            // 实现并实例化生产者、中间消费者以及写出消费者。
            BpProducer bpProducer = new StringBpProducer();
            BpConsumer bpConsumer = new StringBpConsumer();
            MidConsumer midConsumer = new MidConsumer() {
                @Override
                protected String transform(String inValue) {
                    try {
                        // 模拟中间消费者的处理过程。
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    return inValue + "\ta";
                }

            }

            // 实例化主控类。
            BpController<String, String>  controller = new BpController<>(bpProperties, bpProducer, midConsumer, bpConsumer);
            controller.run();
        }
    }

更多用法在example包里。

资源

Github: AlexGumHub / BreakpointProducerConsumer

OSChina: AlexGum / BreakpointProducerConsumer

猜你喜欢

转载自blog.csdn.net/c13232906050/article/details/52205374