Java 提高输出到文件的性能

Java 提高输出到文件的性能,java,compression,inflate,Java,Compression,Inflate,我遵循下面类似的代码。环顾不同的实现,似乎大多数人都通过字节复制来执行相同的操作。有没有一种更快的方法来处理从文件中充气并打印回文件 public static String unzipString(InputStream in) { try { int length = (int) in.readUBits( 16 ); // Add extra byte to array when Inflater is set to true byte[] data = in.re

我遵循下面类似的代码。环顾不同的实现,似乎大多数人都通过字节复制来执行相同的操作。有没有一种更快的方法来处理从文件中充气并打印回文件

public static String unzipString(InputStream in) {
try {
    int length = (int) in.readUBits( 16 );
    // Add extra byte to array when Inflater is set to true
    byte[] data = in.read( length );

    ByteArrayInputStream bin = new ByteArrayInputStream(input);
    InflaterInputStream in = new InflaterInputStream(bin);
    FileoutputStream bout = new FileoutputStream(this.file);
    int b;
    while ((b = in.read()) != -1) {
        bout.write(b);
    }
    bout.close();

} catch (IOException io) {
    return null;
}

}处理文件时,一次复制一个字节总是非常慢的。我建议您使用8KB的缓冲区

try (FileOutputStream fout = new FileOutputStream(this.file)) {
    byte[] bytes = new byte[8192];
    for (int len; (len = in.read(bytes)) != -1;)
        fout.write(b, 0, len);
}

顺便说一句,为了加快速度,您可以首先避免使用InputStream复制字节[],InputStream封装了字节,但读取的是精确长度的字节。

您的代码看起来很笨拙。我不知道它是否会编译。这不是我的代码。这是我从谷歌上得到的一个例子。它类似于上面给出的按字节写入的输出。我的文件很大,似乎每个文件需要2分钟才能写入,其中每个文件的压缩大小为1600KB,未压缩大小为26MB。Outputstream写字节似乎是一个漫长的过程。这段代码非常糟糕。你应该试试另一个例子。我无法改善已经倒塌的房子,这很公平。有没有一种简单的解决方案,可以使用充气来充气已放气的文件,而不需要手动复制字节?我想没有。只要是纯Java,就必须进行字节复制。即使它似乎避免了直接字节复制,但实际上它在您没有注意到的地方使用了它。这方面唯一的改进是使用缓冲区复制多个字节,通常大小为几KB,而不是一次复制一个字节