Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从数据库获取字节数组_Java_Angularjs_Mongodb - Fatal编程技术网

Java 从数据库获取字节数组

Java 从数据库获取字节数组,java,angularjs,mongodb,Java,Angularjs,Mongodb,我想从数据库mongo中获取一个字节数组java并对其进行操作,将其作为原始图像发送到DOM,等等 BasicDBObject condition = new BasicDBObject("_id", new ObjectId(_id)); DBObject dataset = DataAccess.GetInstanceClass().Getdatasets().findOne(condition); byte[] image = (byte[]) dataset.get("i

我想从数据库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);
这只会返回 信息:提供商:[B@3b249009

做:

System.out.println("provider: " + image);
或:

这两种方法都会打印数组的默认toString,在您的例子中,它是指向数组的指针,非常难看[B@3b249009

如果您想查看字节数组更有用的字符串表示形式,可以从以下内容中找到答案:

另外,正如你所指出的,事实上你不需要,也不应该这样做

dataset.get("image").toString().getBytes();
你把你的数据弄得乱七八糟

我编写了一个简短的测试来演示如何从MongoDB中获取字节数组,以及将其作为默认字符串写入与使用Arrays.toString方法的区别:


[B@3b249009是对字节[]调用toString的结果对象。最初,我想将其转储到glassfish控制台中,只是为了让我确信它正在返回,然后我想将其作为图像返回到视图中。如果我愿意,Java似乎会提供一种转换方法。这就是调试器或单元测试的目的,而不是修改源代码以发出调试垃圾:在任何情况下,y您将希望开始查看dataset.getimage的结果,而不是所有其他不必要转换的结果。actualValue.toString.getBytes操作将有效地删除它拥有的任何有用的[typed]值-如上所述,byteArrayObject.toString将返回[B@deadbeef这不是你想要的。好的。是的,当然!来回的类型转换是ludricrous的,并且表达了过程中的特定时刻和挫折程度。因此,根据你的建议,我回到了我开始使用的内容:ie;dataset.get,它返回一个类似的对象[B@438d3c21只是不知道该怎么办。我从StackOverflow尝试了很多解决方案,都没有用。可能是字符串[B@438d3c21是存储的吗?如果是,那么我怀疑它是在字节[]被意外地按照上述方式字符串化之后存储的。
System.out.println("byte array as pretty string: " + Arrays.toString(image));
dataset.get("image").toString().getBytes();
@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));
}