进行以下两种方法中的一种即可解决问题。
增加JVM的堆空间
在启动Java时添加参数,将Xmx(最大堆大小)设置为更大的值,例如2GB:
java -Xmx2g yourprogram
如果您正在使用Ecl
ip
se等IDE运行程序,则可以在“Run Configurations”中进行更改。
改善代码中对内存的使用
检查并优化您的代码,以减少对内存的使用。在此问题中,可能是在压缩文件时,您正在尝试将过多的字节存储在ByteArrayOutputStream中。您可以通过按需进行压缩,在完成压缩后及早释放内存来解决这个问题。
以下是一个示例代码,它将文件压缩为Z
IP
格式并将其写入输出流:
public void z
ip
File(File inputFile, OutputStream outputStream) throws IOExce
pt
ion {
byte[] buffer = new byte[1024];
try (Z
ip
OutputStream z
ip
OutputStream = new Z
ip
OutputStream(outputStream)) {
z
ip
OutputStream.setLevel(Deflater.DEFAULT_COMPRESSION);
try (FileInputStream fileInputStream = new FileInputStream(inputFile);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream, buffer.length)) {
Z
ip
Entry z
ip
Entry = new Z
ip
Entry(inputFile.getName());
z
ip
OutputStream.putNextEntry(z
ip
Entry);
int readBytes;
while ((readBytes = bufferedInputStream.read(buffer, 0, buffer.length)) != -1) {
z
ip
OutputStream.write(buffer, 0, readBytes);
z
ip
OutputStream.closeEntry();
在此方法中,我们使用了try-with-resources语句,以确保在完成后正确关闭流对象。而且,我们使用了缓冲用以减少对内存的使用。若文件比较大,则使用缓冲是非常重要的。