Java Самый быстрый способ записи данных с помощью BufferedInputStream - PullRequest
0 голосов
/ 09 мая 2020

Я читаю данные по сети (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();
...