我正在使用Java-driver 2.13
. GridFS 将输入作为File
,InputStream
或byte[]
在实例上的createFile()
方法GridFS
中创建GridFSInputFile
。
但是当我试图取回数据时,我确实只有作为File
或outputStream
使用的选项GridFSDBFile.writeTo()
方法。
我想将数据作为byte[]
. GridFS API 中是否有任何直接的方法,或者我需要手动转换它?
我正在使用Java-driver 2.13
. GridFS 将输入作为File
,InputStream
或byte[]
在实例上的createFile()
方法GridFS
中创建GridFSInputFile
。
但是当我试图取回数据时,我确实只有作为File
或outputStream
使用的选项GridFSDBFile.writeTo()
方法。
我想将数据作为byte[]
. GridFS API 中是否有任何直接的方法,或者我需要手动转换它?
没有返回 byte[] 数组的直接方法,但是您可以使用 ByteArrayOutputStream 来实现类似的效果:
GridFSDBFile file = ...
ByteArrayOutputStream baos = new ByteArrayOutputStream();
file.writeTo(baos);
byte[] bytes = baos.toByteArray();
为避免不必要的内存分配,您可以根据 GridFS 文件的长度将初始大小传递给 ByteArrayOutputStream 构造函数,但请注意,长度很长,而 ByteArrayOutputStream 构造函数采用整数。您还可以将 ByteArrayOutputStream 子类化以直接访问其受保护的 buf 字段,因为 toByteArray 方法确实会创建内部缓冲区的副本。