如何使用 GridFS Java API 以 byte[] 形式获取数据?

How to get data as byte[] using GridFS Java API?

我正在使用 Java-driver 2.13。 GridFS 在 GridFS 实例的 createFile() 方法中将输入作为 FileInputStreambyte[] 来创建 GridFSInputFile

但是当我尝试取回数据时,我确实只有 FileoutputStream 使用 GridFSDBFile.writeTo() 方法的选项。

我想获取数据为 byte[]。 GridFS 有没有直接的方法API 或者我需要手动转换它?

没有直接的方法returns一个byte[]数组,但是你可以使用一个ByteArrayOutputStream来达到类似的效果:

GridFSDBFile file = ...
ByteArrayOutputStream baos = new ByteArrayOutputStream();
file.writeTo(baos);
byte[] bytes = baos.toByteArray();

为避免不必要的内存分配,您可以根据GridFS文件的长度向ByteArrayOutputStream构造函数传递一个初始大小,但注意长度是long,而ByteArrayOutputStream构造函数采用整数。您还可以子类化 ByteArrayOutputStream 以直接访问其受保护的 buf 字段,因为 toByteArray 方法确实创建了内部缓冲区的副本。