2015-10-05 124 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(); 编码计算更多的字节,为什么堆大小变满。 –