GridFS 存储 GZIPOutputStream

GridFS Storage GZIPOutputStream

我希望将我的文件存储得尽可能小。所以我决定压缩我的 json 文件。我目前正在使用我的方法创建 gzip 文件,上传 mongodb 并删除文件夹中的文件,但我注意到 gridfs 具有将输入流保存到数据库的功能。

我的问题

  1. 我应该使用上面提到的当前顺序还是 gridfs 上传流功能?
  2. 为较小的数据大小制作文件 gzip 是好的解决方案吗?

如果我的所有问题的答案都是肯定的。我想知道如何使用 GridFS Inputstream 并将我的 gzip 代码转换为 gridfs。

当前代码

try {
    GZIPOutputStream gzip = new GZIPOutputStream(new FileOutputStream("pdiskio.dsv"));
    OutputStreamWriter osw = new OutputStreamWriter(gzip, StandardCharsets.UTF_8);
    osw.write(saves.toJSONString());
    osw.close();
} catch (IOException e) {
    e.printStackTrace();
}

经过一些搜索和尝试,我学会了如何正确使用它而不使用我的文件夹数据。我想与搜索该代码的人分享我的示例代码。

这是示例代码

    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    GZIPOutputStream gzip = new GZIPOutputStream(byteArrayOutputStream);
    gzip.write(saves.toJSONString().getBytes(StandardCharsets.UTF_8));
    gzip.close();

    GridFSBucket gridFSFilesBucket = GridFSBuckets.create(database, "pdisks");
    GridFSUploadOptions options = new GridFSUploadOptions()
            .metadata(new Document("metadataValue", "test-value"));

    InputStream ff = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
    ObjectId fileId = gridFSFilesBucket.uploadFromStream(minewatchSaveManager.getId(), ff, options);