/**
* Override this to translate (such as decrypt or expand) the file input stream
* as it is being read from disk.
* The default behavior is to to pass the stream through unmodified.
*
* @param fis the stream to decorate
* @return a decorated stream
* @throws IOException
* @see #decorateOutputStream(FileOutputStream)
*/
protected InputStream decorateInputStream(FileInputStream fis) throws IOException {
return fis;
}
因为我想在设置compress:true时替换此方法
@Override
//GZIPInputStream default cache byte size is 512b
protected InputStream decorateInputStream(FileInputStream fis) throws IOException {
return new GZIPInputStream(fis);
}
为什么我要换掉这个?因为我想弄清楚高速缓存大小是否是在高并发(apache jmeter:50个用户,6个循环,ramup 20)情况下减慢从POI-SXSSF-sheet???.gz到POI-SXSSF-template???.xlsx的写入速度的主要原因。但问题是在初始化SXSSFWorkbook时如何使用我自己的SheetDataWriter?
您是在问如何重写java
中的方法吗?这似乎是一个很基本的问题。
您可以拥有自己的SXSSFWorkbook
类,该类扩展默认的SXSSFWorkbook
并覆盖受保护的SheetDataWriter createSheetDataWriter()
。如果是压缩的临时文件,则可以返回扩展的GZipSheetDataWriter
,它覆盖Protected InputStream decorateInputStream(FileInputStream fis)
。
完整的工作示例:
import java.io.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.*;
import java.util.zip.GZIPInputStream;
class OverrideSXSSFWorkbook {
public static void main(String[] args) throws Exception {
try (
SXSSFWorkbook workbook = new MySXSSFWorkbook(); FileOutputStream fileout = new FileOutputStream("Excel.xlsx") ) {
workbook.setCompressTempFiles(true);
Sheet sheet = workbook.createSheet();
Row row;
Cell cell;
row = sheet.createRow(0);
cell = row.createCell(0);
cell.setCellValue("CellValue");
workbook.write(fileout);
workbook.close();
workbook.dispose();
}
}
}
class MySXSSFWorkbook extends SXSSFWorkbook {
@Override
protected SheetDataWriter createSheetDataWriter() throws IOException {
if(isCompressTempFiles()) {
System.out.println("GZIPSheetDataWriter");
//return new GZIPSheetDataWriter(getSharedStringSource());
return new GZIPSheetDataWriter(getSharedStringSource()) {
@Override
protected InputStream decorateInputStream(FileInputStream fis) throws IOException {
System.out.println("overridden decorateInputStream");
return new GZIPInputStream(fis);
}
};
}
System.out.println("default SheetDataWriter");
return new SheetDataWriter(getSharedStringSource());
}
}
问题内容: 我在这张桌子上遇到麻烦 我想要一个外键约束,并且可以。然后,我还想向该属性添加一个约束,以便它只能采用值“ a”,“ d”和“ u”。我无法将字段设置为或。 谁能告诉我为什么这段代码在MySQL中不起作用? 问题答案: 正如我在本文中所解释的,从8.0.16版本开始,MySQL添加了对CHECK约束的支持: 以前,仅在使用BEFORE INSERT和BEFORE UPDATE触发器时才
是否有一个时间格式来指定这样的日期序列到轴在D3和v4?
Thymeleaf有许多有用的实用程序,如或。我试图添加一个自定义的,但不知道如何注册这一点。
问题内容: 我想向我的Web应用程序添加一个自定义的右键单击菜单。无需使用任何预建的库就可以做到吗?如果是这样,如何显示一个不使用第三方JavaScript库的简单自定义右键单击菜单? 我的目标是像Google文档那样。它允许用户右键单击并向用户显示他们自己的菜单。 注意: 我想学习如何制作自己的东西,而不是使用大多数人以来已经制作的东西,那些第三方库充斥着功能,而我只想要我需要的功能,因此我希望
我想在向url发送请求时添加假用户代理。但它并没有添加假useragent,而是使用默认的useragent。
我无法在gradle项目中添加自定义源代码集。如何初始化这里的版本号?我的gradle文件看起来像: