java - RoaringBitmap使用node和java序列化为不同的字符串

标签 java node.js bitmap

我正在使用roaring bitmaps存储值数组。

何时使用nodejs应用程序创建和序列化位图。 Java 应用程序获取序列化字符串并重新创建位图。

下面是 Node js代码-

 const RoaringBitmap32 = require('roaring/RoaringBitmap32');
const bitmap2 = new RoaringBitmap32([3, 4, 100]);
console.log('bitmap2.toArray():', bitmap2.toArray());
console.log('contentToString:', bitmap2.contentToString());
const serialized = bitmap2.serialize()
console.log("serialized " + serialized)
console.log('base 64 serialized:', serialized.toString('base64'))
console.log('deserialized:', RoaringBitmap32.deserialize(serialized).toArray())

下面是输出 -

bitmap2.toArray(): [ 3, 4, 100 ]
contentToString: [3,4,100]
serialized d
base 64 serialized: AQMAAAADAAAABAAAAGQAAAA=
deserialized: [ 3, 4, 100 ]

下面是java代码 -

public static void main(String[] args) {
    MutableRoaringBitmap mrb = MutableRoaringBitmap.bitmapOf(3, 4, 100);
    System.out.println("starting with  bitmap "+ mrb);
    ByteBuffer outbb = ByteBuffer.allocate(mrb.serializedSizeInBytes());
    mrb.serialize(outbb);
    outbb.flip();
    String serializedstring = Base64.getEncoder().encodeToString(outbb.array());
    System.out.println("serializedstring :\n" + serializedstring);
}

java代码的输出是-

starting with  bitmap {3,4,100}
serializedstring :
OjAAAAEAAAAAAAIAEAAAAAMABABkAA==

我的问题是为什么具有相同内容的位图会产生不同的序列化字符串?

如何使咆哮位图的序列化和反序列化在java和node.js之间互操作?

最佳答案

您遇到字节顺序问题。来自 Javadoc:

Note: Java's data structures are in big endian format. Roaring serializes to a little endian format, so the bytes are flipped by the library during serialization to ensure that what is stored is in little endian---despite Java's big endianness. You can defeat this process by reflipping the bytes again in a custom DataOutput which could lead to serialized Roaring objects with an incorrect byte order.

关于java - RoaringBitmap使用node和java序列化为不同的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57283642/

相关文章:

java - 需要多少 Java 才能有效地使用 Hadoop 和 Mahout?

java - 为什么在 Java 中检测到的语言结果为空

Java 泛型 : why is this output possible?

java - 如何在android中将位图设置为ARGB_8888?

Android:如何将图像加载到位图中

java - 在不知道 key 类型的情况下从 KeyManagers 获取所有别名

ios - 按下安装后 iOS 配置文件返回什么类型的响应

javascript - 过滤掉node_modules中组件引起的React警告

javascript - 我可以在 node.js 中使用 http.ServerResponse 作为原型(prototype)吗?

c++ - 写入 .BMP - 图像失真