![](/img/trans.png)
[英]Matlab delete all documents from MongoDB collection via Java driver
[英]Read data from MongoDB (gridfs) via Matlab and Java driver
我正在使用Matlab和Java驱动程序。 将一些大数据写入数据库后,我想稍后再读取它们。 这些文件大约有100MB,因此我将它们写入GridFS。
我通过以下方式将Java驱动程序中的数据读取到Matlab中:
dbgridfs = GridFS(db, 'data_gridfs');
file1 = dbgridfs.findOne('bigdata');
在该代码之后,我将在Matlab工作区中获得一个对象:名称大小字节类File1 1x1 com.mongodb.gridfs.GridFSDBFile
现在,我遇到了将(Java?)对象转换为nativ Matlab变量的问题。
我在不同的网站上搜索了很多,但没有得到。 目前,我正在将数据写入硬盘,然后将其读入本地Matlab变量中-但这是一种非常肮脏的方式,不要问我有关性能的问题:(
我是否缺少使用Java驱动程序的现有解决方案,并且/或者您知道一些可以帮助我的代码吗? 谢谢你的帮助。
关于马特
我从未回答过任何论坛问题,但特别是从stackoverflow中受益匪浅,因此我认为我必须至少回馈一次。 由于上述问题现在困扰着我近两天,因此我最终找到了解决方案,我认为这是一个回馈社区的好话题。
我遇到了使用Java驱动程序从MongoDB / GridFS检索图像(.png)的相同问题。 首先,如上所述,您需要检索文件Java对象:
import com.mongodb.*;
import com.mongodb.gridfs.*;
mongoClient = MongoClient('server_name',27017);
db = mongoClient.getDB('database_name');
imgData = GridFS(db,'image_data');
上面的代码部分将获取带有图像数据的集合。 之后,可以检索图像数据Java对象:
javaIObj = imgData.findOne('image_name.png');
现在需要ByteArrayOutputStream,可以在其中将数据流而不是文件通过管道传输到其中:
import java.io.ByteArrayOutputStream;
baos = ByteArrayOutputStream();
javaIObj.writeTo(baos);
需要再次将输出流传递到ByteArrayInputStream中,该ByteArrayInputStream可用于构造ImageIO对象:
import java.io.ByteArrayInputStream;
import javax.imageio.ImageIO;
bais = ByteArrayInputStream(baos.toByteArray());
jbi = ImageIO.read(bais);
现在可以检索和显示实际的Matlab图像作为矩阵:
nrows = jbi.getHeight; ncols = jbi.getWidth;
data = jbi.getData.getPixels(0,0,ncols,nrows,[]);
matImg = reshape(data,ncols,nrows)';
imagesc(matImg);
我不知道这是否是完美的解决方案,但是它对我有用。
干杯!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.