繁体   English   中英

通过Matlab和Java驱动程序从MongoDB(gridfs)读取数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM