luben / zstd-jni

JNI binding for Zstd
Other
809 stars 165 forks source link

Closing ZstdOutputStream without any write produces empty files #249

Closed progval closed 1 year ago

progval commented 1 year ago
$ rm /tmp/data*.csv.zst
$ cat Repro.java
import com.github.luben.zstd.ZstdOutputStream;
import java.io.*;

public class Repro {
    public static void main(String[] args) throws IOException {
        OutputStream outputStream1 = new ZstdOutputStream(
                new BufferedOutputStream(new FileOutputStream("/tmp/data1.csv.zst")));
        outputStream1.close();

        OutputStream outputStream2 = new ZstdOutputStream(
                new BufferedOutputStream(new FileOutputStream("/tmp/data2.csv.zst")));
        outputStream2.write(new byte[] {});
        outputStream2.close();

        OutputStream outputStream3 = new ZstdOutputStream(
                new BufferedOutputStream(new FileOutputStream("/tmp/data3.csv.zst")));
        outputStream3.write(new byte[] { 0x0a });
        outputStream3.close();
    }
}
$ java Repro.java
$ ls -l /tmp/data*.csv.zst
-rw-r--r-- 1 dev dev  0 Mar  1 16:16 /tmp/data1.csv.zst
-rw-r--r-- 1 dev dev  9 Mar  1 16:16 /tmp/data2.csv.zst
-rw-r--r-- 1 dev dev 10 Mar  1 16:16 /tmp/data3.csv.zst

data1.csv.zst should be a zstd file with empty content (like data2.csv.zst); but instead it is an empty file.

Tested with versions 1.5.1-1 and 1.5.4-2.

luben commented 1 year ago

Thanks for reporting it!