Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将大字符串写入文件时出现问题_Java_String_File_Base64 - Fatal编程技术网

Java 将大字符串写入文件时出现问题

Java 将大字符串写入文件时出现问题,java,string,file,base64,Java,String,File,Base64,我试图用Base64写一个字符串,这个字符串代表一个PDF文件 for (int i = 0; i < 500; i++) { cedula++; escribirArchivo.escribirInfoEnElArchivo(data1.append(pdf).append(",").append(cedula).toString()); escribirArchivo.escribirInfoEnElArchivo(data2.appen

我试图用Base64写一个字符串,这个字符串代表一个PDF文件

for (int i = 0; i < 500; i++) {
        cedula++;
        escribirArchivo.escribirInfoEnElArchivo(data1.append(pdf).append(",").append(cedula).toString());
        escribirArchivo.escribirInfoEnElArchivo(data2.append(pdf2).append(",").append(cedula).toString());
        escribirArchivo.escribirInfoEnElArchivo(data3.append(pdf3).append(",").append(cedula).toString());
    }

这将消耗大约2-3GB的ram在某些时候我耗尽内存并抛出堆内存并出错,我如何才能以更好的方式执行此操作?

正如azurefrog在其评论中所说,在写入之前先创建整个字符串对于内存来说是非常昂贵的。不要构建字符串并将其传递给
escribirInfoEnElArchivo()
,只需传递pdf并使用文件编写器从那里写入即可。如果您需要附加其他信息,可以在编写pdf后在
escribirInfoEnElArchivo()
中添加这些信息。

不要先在内存中构建整个字符串。只需将其逐段写入文件。此处需要a…什么是
data1
data2
data3
pdf
pdf2
pdf3
?内存中真的需要这些吗?如前所述,它们每增加500倍。数据1、数据2、数据3是StringBuilder,pdf、pdf、pdf3是Base64字符串,表示三种不同大小的pdf。您是否故意不清除StringBuilder?我想在添加
pdf+“,“+cedula
500次后,
data1
将相当长,并将占用大量内存。我如何清除它?
  public void escribirInfoEnElArchivo( String infoToWrite) {
    try {
        fileWriter.write(infoToWrite + "\n");
    } catch (IOException e) {
        e.printStackTrace();
    }
}