2015-10-05 122 views
1

我創建與文件名,文件內容類型和FILEDATA ASN1格式的文件時,曾經我導入大尺寸的文件時,它給人的Java堆空間錯誤。ASN1文件創建給錯誤的大文件大小

ASN1EncodableVector seq = new ASN1EncodableVector(); 
seq.add(new DERTaggedObject(false, 0, new DERSequence(new DERUTF8String(new File(filePath).getName())))); 

    seq.add(new DERTaggedObject(false, 1, new DERSequence(new DERUTF8String(fileContentType)))); 
     seq.add(new DEROctetString(fileDataInBytes)); 
     ASN1InputStream tempstream=new ASN1InputStream(new ByteArrayInputStream(bytesArray)); 
     ASN1Sequence seq1=(ASN1Sequence)tempstream.readObject(); 
     seq.add((ASN1Encodable) seq1); 
    byte[] filebytes= new DERSequence(seq).getEncoded();//On this line i am getting error of heap size 
    FileUtils.writeByteArrayToFile(new File(fileName) , filebytes); 

有沒有其他方法可以做同樣的事情。

回答

0

你正在編寫,因此沖洗你的字節的全部內容[]一次當你使用命令: -

FileUtils.writeByteArrayToFile(new File(fileName) , filebytes); 

1)你需要減少filebytes的大小關係,保持經常沖洗它,說循環。在寫入下一組字節[]之前,您需要確定要在內存中保留多少字節[]。這樣,您可以管理堆大小。 使用

public static void writeByteArrayToFile(File file, 
          byte[] data, 
          boolean append) 
            throws IOException 

這將追加文件

2)您可以使用-Xms和XMX選項(雖然我owuld不建議這)

+0

感謝設置inital和最大堆大小的數據答覆我可以在文件中逐字節追加。你能解釋你的代碼嗎?如何嵌入文件? –

+0

是的..你可以做that.You必須確保的byte []的大小不是很高,可以同時選中writeByteArrayToFile.It的重載方法已經可以抵消由JVM在其heap.You進行管理,長度參數來確定字節和位置的長度 –

+0

我的問題是,只有我必須允許具有更大尺寸的文件。以及爲什麼byte []變得非常高。 ,之所以我收到這條線上的字節[] filebytes =新DERSequence(SEQ)錯誤.getEncoded(); 編碼計算更多的字節,爲什麼堆大小變滿。 –