[英]get byte array from database
我想从数据库(mongo)获取一个字节数组(java)并对其进行操作,将其作为原始图像发送到DOM等。
BasicDBObject condition = new BasicDBObject("_id", new ObjectId(_id));
DBObject dataset = DataAccess.GetInstanceClass().Getdatasets().findOne(condition);
byte[] image = (byte[]) dataset.get("image").toString().getBytes();
String s = new String(image);
System.out.println("provider: " + s);
这只会返回INFO:提供程序:[B @ 3b249009
正在做:
System.out.println("provider: " + image);
要么:
System.out.println("provider: " + new String(image));
两者都导致打印数组的默认toString()
,它是指向数组的指针(在您的情况下,是相当难看的[B@3b249009
))
如果要查看字节数组的更有用的String表示形式,可以找到此问题的答案:
System.out.println("byte array as pretty string: " + Arrays.toString(image));
另外,正如您所指出的,您不需要(实际上不应该)
dataset.get("image").toString().getBytes();
您正在通过各种方式处理数据。
我编写了一个简短的测试来演示如何从MongoDB中获取字节数组,以及将其写为默认String与使用Arrays.toString()
方法的Arrays.toString()
:
@Test
public void shouldBeAbleToGetANiceStringRepresentationOfAByteArray() {
// given
ObjectId id = new ObjectId();
byte[] bytes = {1,2,3,4};
collection.insert(new BasicDBObject("_id", id).append("image", bytes));
// when
BasicDBObject condition = new BasicDBObject("_id", id);
DBObject dataset = collection.findOne(condition);
byte[] image = (byte[]) dataset.get("image");
// then
// this instanceof is actually pointless, since casting it to a byte array above means it must be a byte array, but the point is to demonstrate it's not a String
assertTrue(image instanceof byte[]);
assertThat(image.toString(), startsWith("[B@"));
assertThat(image.toString().length(), is(11));
System.out.println("byte array toString(): " + image);
assertThat(Arrays.toString(image), is("[1, 2, 3, 4]"));
System.out.println("byte array as pretty string: " + Arrays.toString(image));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.