Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import com.github.luben.zstd.ZstdDecompressCtx;
- import com.github.luben.zstd.ZstdInputStream;
- import org.apache.commons.io.IOUtils;
- import sun.nio.ch.DirectBuffer;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.nio.channels.FileChannel;
- import java.nio.file.Path;
- import java.nio.file.Paths;
- import static java.nio.file.StandardOpenOption.*;
- public class DirectBufExample {
- public static void main(String[] args) throws IOException {
- long uncompressedSize = 209715200;
- long compressedSize = 126745877;
- int loops = 10;
- var compressedFile = Paths.get("c:/temp/foo.zstd");
- var uncompressedFile = Paths.get("c:/temp/foo");
- long time = System.currentTimeMillis();
- for (var i = 0; i < loops; i++) {
- extractUsingDirect(compressedSize, uncompressedSize, compressedFile, uncompressedFile);
- }
- System.out.printf("Direct: %s\n", System.currentTimeMillis() - time);
- time = System.currentTimeMillis();
- for (var i = 0; i < loops; i++) {
- extractUsingStreams(compressedFile, uncompressedFile);
- }
- System.out.printf("Streams: %s\n", System.currentTimeMillis() - time);
- time = System.currentTimeMillis();
- for (var i = 0; i < loops; i++) {
- extractUsingByteArray(uncompressedSize, compressedFile, uncompressedFile);
- }
- System.out.printf("Byte arrays: %s\n", System.currentTimeMillis() - time);
- }
- private static void extractUsingByteArray(long uncompressedSize, Path compressedFile, Path uncompressedFile) throws IOException {
- try (
- var inputStream = new FileInputStream(compressedFile.toFile());
- var outFile = new FileOutputStream(uncompressedFile.toFile());
- var zstd = new ZstdDecompressCtx();
- ) {
- zstd.setFinalize(false);
- byte[] data = zstd.decompress(inputStream.readAllBytes(), (int) uncompressedSize);
- outFile.write(data);
- }
- }
- private static void extractUsingStreams(Path compressedFile, Path uncompressedFile) throws IOException {
- try (
- var inputStream = new FileInputStream(compressedFile.toFile());
- var outFile = new FileOutputStream(uncompressedFile.toFile());
- var zstd = new ZstdInputStream(inputStream)
- ) {
- zstd.setFinalize(false);
- IOUtils.copy(zstd, outFile);
- }
- }
- private static void extractUsingDirect(long compressedSize, long uncompressedSize, Path compressedFile, Path uncompressedFile) throws IOException {
- try (
- var from = FileChannel.open(compressedFile, READ);
- var to = FileChannel.open(uncompressedFile, TRUNCATE_EXISTING, WRITE, READ);
- var zstd = new ZstdDecompressCtx()
- ) {
- var directBufferFrom = from.map(FileChannel.MapMode.READ_ONLY, 0, compressedSize);
- var directBufferTo = to.map(FileChannel.MapMode.READ_WRITE, 0, uncompressedSize);
- zstd.setFinalize(false);
- zstd.decompressDirectByteBuffer(directBufferTo, 0, (int) uncompressedSize, directBufferFrom, 0, (int) compressedSize);
- ((DirectBuffer) directBufferFrom).cleaner().clean();
- ((DirectBuffer) directBufferTo).cleaner().clean();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment