Я читаю данные по сети (Salesforce) в InputStream. А затем добавив к нему буферизацию, используя BufferedInputStream для чтения больших блоков байтов вместо одного байта за раз, чтобы ускорить ввод-вывод и записать его в файл с помощью OutputStream.
Я думаю, что код можно оптимизировать, возможно, мне что-то не хватает для повышения производительности. Поскольку есть 3 файла CSV, которые я читаю из сети после записи в ZIP, каждый файл содержит 50 000 строк и 150 столбцов, размер CSV составляет примерно 250 МБ. На запись каждого файла уходит 1 мин. Можно ли сократить до 20-30 секунд для каждого файла? Учитывая, что CSVWriter может записать миллионы данных ResultSet за несколько минут.
SystemDetails:
RAM - 32 GB
CPU - Intel i7 @2.60GHz (2 Cores, 4 logical processors)
Java 8
Windows 10
Internet Speed around 50 Mbps.
Код:
InputStream inputStream = null;
BufferedInputStream buffInput = null;
byte[] buffer = new byte[1024];
String filenameformat = "File_Name";
ZipOutputStream outputStream = null;
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
inputStream = bulkConnection.getQueryResultStream(String batches);
outputStream = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(datapath)));
buffInput = new BufferedInputStream(inputStream,1024);
outputStream.putNextEntry(new ZipEntry(filenameformat + ".csv") );
int length;
while ((length = buffInput.read(buffer)) != -1)
{
outputStream.write(buffer, 0, length);
}
buffInput.close();
outputStream.closeEntry();
outputStream.finish();
outputStream.flush();