Java 哪一个更轻,JSON还是BSON?

Java 哪一个更轻,JSON还是BSON?,java,json,jackson,bson,Java,Json,Jackson,Bson,我已经编写了将对象序列化为JSON和BSON的代码。根据我的输出,生成的BSON的大小大于JSON。这是预期的吗 来自我的Bson.class的代码(使用Jackson和bson4jackson) 来自我的Json.class private ByteArrayOutputStream baos = new ByteArrayOutputStream(); private ObjectMapper mapper = new ObjectMapper(); public Json(Object

我已经编写了将对象序列化为JSON和BSON的代码。根据我的输出,生成的BSON的大小大于JSON。这是预期的吗

来自我的
Bson.class的代码(使用Jackson和bson4jackson)

来自我的
Json.class

private ByteArrayOutputStream baos = new ByteArrayOutputStream();
private ObjectMapper mapper = new ObjectMapper();

public Json(Object obj) throws JsonGenerationException,
        JsonMappingException, IOException {
    mapper.writeValue(baos, obj);
}
size()
toString()
如上所述)

我的POJO是
Person.class
Address.class

在我的主课中:

    Address a = new Address("Jln Koli", "90121", "Vila", "Belgium");
    Person p = new Person("Ali Bin Baba", new Date(), 90.0, 12, a);

    List<Person> persons = new LinkedList<>();
    persons.add(p);
    persons.add(p);

    Bson bson = new Bson(persons);
    Json json = new Json(persons);
    System.out.println("Bson : " + bson.size() + ", data : " + bson.toString());
    System.out.println("Json : " + json.size() + ", data : " + json.toString());
Bson : 301, data : -
Json : 285, data : [{"name":"Ali Bin Baba","birthd...
我的问题:

    Address a = new Address("Jln Koli", "90121", "Vila", "Belgium");
    Person p = new Person("Ali Bin Baba", new Date(), 90.0, 12, a);

    List<Person> persons = new LinkedList<>();
    persons.add(p);
    persons.add(p);

    Bson bson = new Bson(persons);
    Json json = new Json(persons);
    System.out.println("Bson : " + bson.size() + ", data : " + bson.toString());
    System.out.println("Json : " + json.size() + ", data : " + json.toString());
Bson : 301, data : -
Json : 285, data : [{"name":"Ali Bin Baba","birthd...
  • 这个输出是真的,还是我的代码错了
  • 有没有检查/测试、比较BSON和JSON大小的建议
  • 属性
    “foo”:“bar”
    使用UTF-8编码的11个字节。它消耗13:

    bytes       description
    ============================================
    1           entry type value \x02
    3           "foo"
    1           NUL \x00
    4           int32 string length (4 -- includes the NUL)
    3           "bar"
    1           NUL \x00
    
    在许多情况下,JSON将更加紧凑。

    来自:

    BSON被设计为在空间上高效,但在许多情况下并非如此 比JSON更高效。在某些情况下,BSON会占用更多的空间 而不是JSON。原因是BSON的另一个设计目标: 可遍历性。BSON在文档中添加了一些“额外”信息,如 长度前缀,使其易于快速遍历

    BSON也被设计成能够快速编码和解码。例如 整数存储为32(或64)位整数,因此它们不需要 可以在文本之间进行解析。对于小型应用程序,这比JSON使用更多的空间 整数,但解析速度要快得多

    对于字符串字段,JSON中的开销是6个字节——4个引号、一个冒号和一个逗号。在BSON中,它是7——条目类型字节,字段名为null终止符,字符串长度为4字节,值为null终止符

    对于整数字段,JSON长度取决于数字的大小。“1”只是一个字节。“1000000”是7个字节。在BSON中,这两个都是4字节32位整数。浮点数的情况与此类似

    BSON不打算更小。它的目的是更接近计算机本机使用的结构,以便更有效地使用它——这是“光”的一个含义

    如果您没有追求极高的性能水平(设计BSON的MongoDB开发人员就是这样),那么我建议使用JSON——人性化的可读性对开发人员来说是一大好处。只要您使用像Jackson这样的库,以后迁移到BSON应该不难——正如您可以看到的,您自己的BSON和JSON类几乎完全相同


    请记住,如果大小是一个问题,JSON和BSON都应该很好地压缩。

    我会尝试解码生成的数据。我假设BSon的解码速度更快,而不是更紧凑。如果您想要密集格式并使用Java,一定要使用协议缓冲区,它们比其中任何一种都要紧凑,而且速度要快得多,尽管它们需要一个模式。您应该更一般地说明您的问题,例如“JSON是否有一种有效的二进制表示格式”?那么您可能会得到MessagePack()作为答案。BSON实际上不是很好,无论是在编码速度、消息大小还是JSON兼容性方面。MessagePack在所有方面都更好,但由于它的名称,它没有立即作为二进制JSON格式关联,这是BSON做得更好的部分。