【仅供内部供应商使用,不提供对外解答和培训】

Page tree

【仅供内部供应商使用,不提供对外解答和培训】

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

接口作用

希望在导出操作之前,加入一些自定义操作,可以用这个接口实现。比如导出的文件进行自定义加密。

接口内容

主要接口

ExportHandleProvider
package com.finebi.stable.fun;

import com.fr.stable.fun.mark.Mutable;

import java.io.OutputStream;

/**
 * Created by Hiram on 2018/11/14.
 */
public interface ExportHandleProvider extends Mutable {
    String XML_TAG = "ExportHandleProvider";

    int CURRENT_LEVEL = 1;

    /**
     *
     * @param originalOutputStream  原始导出流
     * @param type  导出类型
     * @return 处理后的流
     */
    OutputStream handleStream(OutputStream originalOutputStream, ExportType type);
}


接口接入

<extra-core>
    <ExportHandleProvider class="com.fr.plugin.demo.export.CountExportHandle"/>
</extra-core>


示例效果

简单的统计一下导出文件的大小,输出在日志里面。

写一个拦截处理的CountExportHandle,返回一个CountOutputStream,在write时计数,最后在close的时候输出大小。

 

接口示例

CountExportHandle
import com.finebi.stable.fun.ExportType;
import com.finebi.stable.fun.impl.AbstractExportHandleProvider;
import java.io.OutputStream;
public class CountExportHandle extends AbstractExportHandleProvider {
    @Override
    public OutputStream handleStream(OutputStream originalOutputStream, ExportType type) {
        return new CountOutputStream(originalOutputStream);
    }

}
CountOutputStream
import com.fr.log.FineLoggerFactory;
import java.io.IOException;
import java.io.OutputStream;


public class CountOutputStream extends OutputStream {

    private OutputStream out;

    private int count;

    public CountOutputStream(OutputStream out) {
        this.out = out;
    }

    @Override
    public void write(int b) throws IOException {
        count++;
        out.write(b);
    }

    @Override
    public void write(byte[] b) throws IOException {
        count += b.length;
        out.write(b);
    }

    @Override
    public void write(byte[] b, int off, int len) throws IOException {
        count += len;
        out.write(b, off, len);
    }

    @Override
    public void flush() throws IOException {
        out.flush();
    }

    @Override
    public void close() throws IOException {
        FineLoggerFactory.getLogger().info("===== export length: {}  ======", count);
        out.close();
    }
}

  • No labels