Stream file to OpenCSV with the least amount of I/O possible
Switch to uniVocity-parsers as it is twice as fast as OpenCSV and the input is read in parallel.

    final BeanListProcessor&lt;MyObject &gt; clientProcessor = new BeanListProcessor&lt;MyObject&gt;(MyObject .class);

    CsvParserSettings settings = new CsvParserSettings();
    settings.getFormat().setLineSeparator("\n");
    settings.setRowProcessor(clientProcessor);

    settings.setReadInputOnSeparateThread(true); // this enabled by default

    CsvParser parser = new CsvParser(settings);
    parser.parse(new InputStreamReader(new ZipInputStream(inputStream)));

    List&lt;MyObject&gt; rows = clientProcessor.getBeans();


If you are not using all columns of your CSV input, you can select the rows you want as well to make the process even faster:

    settings.selectIndexes(4, 6, 3);
    settings.selectFields("Field A", "B", "and C");


Disclosure: I am the author of this library. It's open-source and free (Apache V2.0 license).