cn.hutool.core.io.copy.IoCopier Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hutool-all Show documentation
Show all versions of hutool-all Show documentation
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
package cn.hutool.core.io.copy;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.io.StreamProgress;
/**
* IO拷贝抽象,可自定义包括缓存、进度条等信息
* 此对象非线程安全
*
* @param 拷贝源类型,如InputStream、Reader等
* @param 拷贝目标类型,如OutputStream、Writer等
* @author looly
* @since 5.7.8
*/
public abstract class IoCopier {
protected final int bufferSize;
/**
* 拷贝总数
*/
protected final long count;
/**
* 进度条
*/
protected StreamProgress progress;
/**
* 是否每次写出一个buffer内容就执行flush
*/
protected boolean flushEveryBuffer;
/**
* 构造
*
* @param bufferSize 缓存大小,< 0 表示默认{@link IoUtil#DEFAULT_BUFFER_SIZE}
* @param count 拷贝总数,-1表示无限制
* @param progress 进度条
*/
public IoCopier(int bufferSize, long count, StreamProgress progress) {
this.bufferSize = bufferSize > 0 ? bufferSize : IoUtil.DEFAULT_BUFFER_SIZE;
this.count = count <= 0 ? Long.MAX_VALUE : count;
this.progress = progress;
}
/**
* 执行拷贝
*
* @param source 拷贝源,如InputStream、Reader等
* @param target 拷贝目标,如OutputStream、Writer等
* @return 拷贝的实际长度
*/
public abstract long copy(S source, T target);
/**
* 缓存大小,取默认缓存和目标长度最小值
*
* @param count 目标长度
* @return 缓存大小
*/
protected int bufferSize(long count) {
return (int) Math.min(this.bufferSize, count);
}
/**
* 设置是否每次写出一个buffer内容就执行flush
*
* @param flushEveryBuffer 是否每次写出一个buffer内容就执行flush
* @return this
* @since 5.7.18
*/
public IoCopier setFlushEveryBuffer(boolean flushEveryBuffer){
this.flushEveryBuffer = flushEveryBuffer;
return this;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy