Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.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 (de)使用NIO压缩文件_Java_Io_Zip_Nio - Fatal编程技术网

Java (de)使用NIO压缩文件

Java (de)使用NIO压缩文件,java,io,zip,nio,Java,Io,Zip,Nio,在许多联机示例中,文件是使用编码缓冲区在java中进行(反)压缩的。但是,对于NIO,不需要选择好的缓冲区大小。我找到了文件和套接字的示例,但是是否有用于压缩输入的NIO通道(例如,GZIPInputStream),因此您可以使用transferFrom,而不是自己创建byte[]缓冲区?不,还没有专门的ZIP通道。。。 我认为你可以做到以下几点。使用NIO读取要缓冲的任何通道。然后检索刚刚从缓冲区读取到字节数组的字节,使用ByteArrayInputStream包装数组并将其传递给ZIPInp

在许多联机示例中,文件是使用编码缓冲区在java中进行(反)压缩的。但是,对于NIO,不需要选择好的缓冲区大小。我找到了文件和套接字的示例,但是是否有用于压缩输入的NIO通道(例如,
GZIPInputStream
),因此您可以使用
transferFrom
,而不是自己创建
byte[]
缓冲区?

不,还没有专门的ZIP通道。。。
我认为你可以做到以下几点。使用NIO读取要缓冲的任何通道。然后检索刚刚从缓冲区读取到字节数组的字节,使用ByteArrayInputStream包装数组并将其传递给ZIPInputStream

您可以使用java.nio.channels.channels中的静态实用程序方法在通道中包装流,反之亦然

例如,要创建一个通道,从中可以从gzip压缩文件中读取未压缩的数据:

FileChannel fc = 
    new RandomAccessFile("input.gz", "r").getChannel();

ReadableByteChannel gzc = 
    Channels.newChannel(
            new GZIPInputStream(
                    Channels.newInputStream(fc)));

ReadableByteChannel没有一个
transferFrom
方法来实际复制数据,这就是我要找的……不必讽刺。我编辑了这个问题以反映我的需要。