cn.hutool.extra.compress.extractor.Seven7EntryInputStream 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.extra.compress.extractor;
import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
import org.apache.commons.compress.archivers.sevenz.SevenZFile;
import java.io.IOException;
import java.io.InputStream;
/**
* 7z解压中文件流读取的封装
*
* @author looly
* @since 5.5.0
*/
public class Seven7EntryInputStream extends InputStream {
private final SevenZFile sevenZFile;
private final long size;
private long readSize = 0;
/**
* 构造
*
* @param sevenZFile {@link SevenZFile}
* @param entry {@link SevenZArchiveEntry}
*/
public Seven7EntryInputStream(SevenZFile sevenZFile, SevenZArchiveEntry entry) {
this.sevenZFile = sevenZFile;
this.size = entry.getSize();
}
@Override
public int available() throws IOException {
try {
return Math.toIntExact(this.size);
} catch (ArithmeticException e) {
throw new IOException("Entry size is too large!(max than Integer.MAX)", e);
}
}
/**
* 获取读取的长度(字节数)
*
* @return 读取的字节数
* @since 5.7.14
*/
public long getReadSize() {
return this.readSize;
}
@Override
public int read() throws IOException {
this.readSize++;
return this.sevenZFile.read();
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy