如何使用 GridFS Java API 以 byte[] 形式获取数据?
How to get data as byte[] using GridFS Java API?
我正在使用 Java-driver 2.13
。 GridFS 在 GridFS
实例的 createFile()
方法中将输入作为 File
、InputStream
或 byte[]
来创建 GridFSInputFile
。
但是当我尝试取回数据时,我确实只有 File
或 outputStream
使用 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 方法确实创建了内部缓冲区的副本。
我正在使用 Java-driver 2.13
。 GridFS 在 GridFS
实例的 createFile()
方法中将输入作为 File
、InputStream
或 byte[]
来创建 GridFSInputFile
。
但是当我尝试取回数据时,我确实只有 File
或 outputStream
使用 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 方法确实创建了内部缓冲区的副本。