我正在创建带有文件名,文件内容类型和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);
有没有其他方法可以做同样的事情。
答案 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选项设置初始和最大堆大小(虽然我没有建议这个)