尝试将巨大的PDF文件读取到字节数组时的java.lang.OutOfMemoryError

时间:2014-05-13 06:30:03

标签: java pdf out-of-memory bytearray fileinputstream

我试图使用字节数组读取大量的pdf文件, 这是我的代码。

String RESULT "D/new/certficateVisualFinal.pdf";
    try {
        FileInputStream fileInputStream=null;

        File file = new File(RESULT);

        byte[] bFile = new byte[(int) file.length()];


            //convert file into array of bytes
        fileInputStream = new FileInputStream(file);
        fileInputStream.read(bFile);
        fileInputStream.close();

        reader = new PdfReader(bFile);
        pdfStamper = new PdfStamper(reader, new FileOutputStream(outPut));

        pdfStamper.setOutlines(outlineVisual);
        pdfStamper.setFormFlattening(true);

 } catch (IOException e) {
    e.printStackTrace();
 } catch (Exception e) {
    e.printStackTrace();
 }

但是在尝试

时我得到了一个OutOfMemoryErro
fileInputStream.read(bFile);

这是错误

Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(FileInputStream.java:220)

请帮助我。谢谢。

1 个答案:

答案 0 :(得分:3)

根本不使用字节数组。 PdfReader有一个带有InputStream参数的构造函数,因此您可以直接将FileInputStream传递给该参数。