Guest User

Untitled

a guest
May 26th, 2020
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.43 KB | None | 0 0
  1. import com.github.luben.zstd.ZstdDecompressCtx;
  2. import com.github.luben.zstd.ZstdInputStream;
  3. import org.apache.commons.io.IOUtils;
  4. import sun.nio.ch.DirectBuffer;
  5.  
  6. import java.io.FileInputStream;
  7. import java.io.FileOutputStream;
  8. import java.io.IOException;
  9. import java.nio.channels.FileChannel;
  10. import java.nio.file.Path;
  11. import java.nio.file.Paths;
  12.  
  13. import static java.nio.file.StandardOpenOption.*;
  14.  
  15. public class DirectBufExample {
  16.     public static void main(String[] args) throws IOException {
  17.         long uncompressedSize = 209715200;
  18.         long compressedSize = 126745877;
  19.         int loops = 10;
  20.  
  21.         var compressedFile = Paths.get("c:/temp/foo.zstd");
  22.  
  23.         var uncompressedFile = Paths.get("c:/temp/foo");
  24.  
  25.  
  26.         long time = System.currentTimeMillis();
  27.         for (var i = 0; i < loops; i++) {
  28.             extractUsingDirect(compressedSize, uncompressedSize, compressedFile, uncompressedFile);
  29.         }
  30.         System.out.printf("Direct: %s\n", System.currentTimeMillis() - time);
  31.  
  32.  
  33.         time = System.currentTimeMillis();
  34.         for (var i = 0; i < loops; i++) {
  35.             extractUsingStreams(compressedFile, uncompressedFile);
  36.         }
  37.         System.out.printf("Streams: %s\n", System.currentTimeMillis() - time);
  38.  
  39.  
  40.         time = System.currentTimeMillis();
  41.         for (var i = 0; i < loops; i++) {
  42.             extractUsingByteArray(uncompressedSize, compressedFile, uncompressedFile);
  43.         }
  44.         System.out.printf("Byte arrays: %s\n", System.currentTimeMillis() - time);
  45.     }
  46.  
  47.  
  48.     private static void extractUsingByteArray(long uncompressedSize, Path compressedFile, Path uncompressedFile) throws IOException {
  49.         try (
  50.                 var inputStream = new FileInputStream(compressedFile.toFile());
  51.                 var outFile = new FileOutputStream(uncompressedFile.toFile());
  52.                 var zstd = new ZstdDecompressCtx();
  53.         ) {
  54.             zstd.setFinalize(false);
  55.             byte[] data = zstd.decompress(inputStream.readAllBytes(), (int) uncompressedSize);
  56.             outFile.write(data);
  57.  
  58.         }
  59.     }
  60.  
  61.     private static void extractUsingStreams(Path compressedFile, Path uncompressedFile) throws IOException {
  62.         try (
  63.                 var inputStream = new FileInputStream(compressedFile.toFile());
  64.                 var outFile = new FileOutputStream(uncompressedFile.toFile());
  65.                 var zstd = new ZstdInputStream(inputStream)
  66.         ) {
  67.             zstd.setFinalize(false);
  68.             IOUtils.copy(zstd, outFile);
  69.         }
  70.     }
  71.  
  72.     private static void extractUsingDirect(long compressedSize, long uncompressedSize, Path compressedFile, Path uncompressedFile) throws IOException {
  73.         try (
  74.                 var from = FileChannel.open(compressedFile, READ);
  75.                 var to = FileChannel.open(uncompressedFile, TRUNCATE_EXISTING, WRITE, READ);
  76.                 var zstd = new ZstdDecompressCtx()
  77.         ) {
  78.             var directBufferFrom = from.map(FileChannel.MapMode.READ_ONLY, 0, compressedSize);
  79.             var directBufferTo = to.map(FileChannel.MapMode.READ_WRITE, 0, uncompressedSize);
  80.  
  81.             zstd.setFinalize(false);
  82.             zstd.decompressDirectByteBuffer(directBufferTo, 0, (int) uncompressedSize, directBufferFrom, 0, (int) compressedSize);
  83.  
  84.             ((DirectBuffer) directBufferFrom).cleaner().clean();
  85.             ((DirectBuffer) directBufferTo).cleaner().clean();
  86.  
  87.         }
  88.     }
  89. }
Advertisement
Add Comment
Please, Sign In to add comment