asn1文件创建为大文件大小提供错误

时间:2015-10-05 12:13:51

标签: java

我正在创建带有文件名,文件内容类型和filedata的asn1格式文件,当我导入大文件时,它会给出java堆空间的错误。

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);

有没有其他方法可以做同样的事情。

1 个答案:

答案 0 :(得分:0)

当您使用命令时,您正在编写并因此立即刷新byte []的全部内容: -

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

1)你需要减少filebytes的大小并定期冲洗它,比如循环。在编写下一组byte []之前,需要确定要保留在内存中的byte []数量。这样,您就可以管理堆大小。 使用

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

这会将数据附加到文件

2)你可以使用Xms和Xmx选项设置初始和最大堆大小(虽然我没有建议这个)