2017-07-14 83 views
1

我無法使用Java 3.4.2驅動程序從MongoDB讀取blob(二進制)記錄。使用Java從mongodb讀取blob(二進制)數據時出錯

BasicDBObject whereClause = new BasicDBObject(); 
    List<BasicDBObject> obj = new ArrayList<BasicDBObject>(); 
    obj.add(new BasicDBObject("blobcontentid", "20160601201035069394000000")); 
    whereClause.put("$and", obj); 

    MongoCursor<Document> cursor = contentcollection.find(whereClause).iterator(); 

    while (cursor.hasNext()) { 
     Document object = cursor.next(); 
     System.out.println(object.getString("blobcontentid")); 
     if (object.get("content") != null){ 
      byte[] content = (byte []) object.get("content"); 
     } else { 
      System.out.println("Content is empty"); 
     }   
    } 

錯誤:java.lang.ClassCastException:org.bson.types.Binary不能轉換爲[B

相同的記錄我在DB2閱讀這樣。 byte [] content = aResult.getBytes(「CONTENT」);

預先感謝您! Bharathi

+0

實際上有一個['.getData()'](http://api.mongodb.com/java/current/org/bson/types/Binary.html#getData--)方法定義在'Binary '類型。哪一個當然會返回'byte []',所以不需要強制執行這樣的強制轉換。只需使用正確的方法。 –

回答

4

您可以使用get() method on a Document with built-in casting來實現此目的。例如:

// Insert a binary data (byte array) into the database 
Document document = new Document("blob", "This is a byte array blob".getBytes()); 
collection.insertOne(document); 

// Find and print the inserted byte array as String 
for (Document doc : collection.find()) { 
    Binary bin = doc.get("blob", org.bson.types.Binary.class); 
    System.out.println(new String(bin.getData())); 
} 

,它將打印將其插入數據庫恢復到控制檯This is a byte array blob

該數據庫將包含BinData元素插入操作的結果:

> db.collection.find() 
{ 
    "_id": ObjectId("5976e23911e6772c5d32c42d"), 
    "blob": BinData(0, "VGhpcyBpcyBhIGJ5dGUgYXJyYXkgYmxvYg==") 
} 

需要注意的是,如果要插入大BLOB二進制數據由於BSON 16MB document size limitation這種方法可能無法正常工作。如果您需要插入超過16MB的二進制數據,我建議使用GridFS

+0

謝謝@Kevin Adistambha 其工作正常 –