当前位置: 首页 > 知识库问答 >
问题:

在将数据存储到Cassandra时,是使用大端还是小端?

杜元明
2023-03-14

我需要使用Java代码将字节数组值写入Cassandra。然后我将让我的C程序从Cassandra读取相同的字节数组数据。

该字节数组由三个字节数组组成,如下所述-

short schemaId = 32767;
long lastModifiedDate = "1379811105109L";
byte[] avroBinaryValue = os.toByteArray();

现在,我将把schemaIdlastModifiedDateavroBinaryValue一起写入一个单独的Byte Array,然后将生成的Byte Array写回Cassandra,然后将我的C该程序将从Cassandra检索Byte Array数据,然后将其反序列化以从中提取schemaIdlastModifiedDateavroBinaryValue

所以现在我很困惑,在给卡珊德拉写信的时候,我是否应该在我的Java代码中使用大端?或者在将数据存储到Cassandra中时,在这里使用小终结字节顺序?

下面是代码,到目前为止我已经用Java实现了,它将所有内容序列化为一个单字节数组。。。

public static void main(String[] args) throws Exception {

    String os = "whatever os is";
    byte[] avroBinaryValue = os.getBytes();

    long lastModifiedDate = 1379811105109L;
    short schemaId = 32767;

    ByteArrayOutputStream byteOsTest = new ByteArrayOutputStream();
    DataOutputStream outTest = new DataOutputStream(byteOsTest);

    outTest.writeShort(schemaId); // first write schemaId
    outTest.writeLong(lastModifiedDate); // second lastModifiedDate
    outTest.writeInt(avroBinaryValue.length); // then attributeLength
    outTest.write(avroBinaryValue); // then its value

    byte[] allWrittenBytesTest = byteOsTest.toByteArray();

    // write this allWrittenBytesTest into Cassandra

    // now deserialize it and extract everything from it
    DataInputStream inTest = new DataInputStream(new ByteArrayInputStream(allWrittenBytesTest));

    short schemaIdTest = inTest.readShort();

    long lastModifiedDateTest = inTest.readLong();

    int sizeAvroTest = inTest.readInt();
    byte[] avroBinaryValue1 = new byte[sizeAvroTest];
    inTest.read(avroBinaryValue1, 0, sizeAvroTest);


    System.out.println(schemaIdTest);
    System.out.println(lastModifiedDateTest);
    System.out.println(new String(avroBinaryValue1));

}

我还试图看看Java中是否有任何有效或正确的方法,因为我需要使用C程序从Cassandra检索这些数据,所以我不想在C端也有任何问题。。所以我试图确保当我从Java端将这些数据写入Cassandra时,一切看起来都很好。。

现在,为了测试我正在做的是-我正在从Java程序将这个字节数组写入一个文件,我正在使用C程序读取同一个文件,然后相应地反序列化这个字节数组。。

我希望我的问题足够清楚。。有人能帮我吗?


共有1个答案

孙修德
2023-03-14

为什么不使用像google protobuf这样的serailization框架呢(http://code.google.com/p/protobuf/)这样,您就不必担心底层细节,也不必从任何语言和工具进行读写

 类似资料:
  • 问题内容: 在数据库中存储图像的常用方法是在存储数据之前将图像转换为数据。此过程将使大小增加33%。或者,可以将图像直接存储为;例如: 然后用 使用后一种方法,我们可以节省1/3的存储空间。为什么像在MySQL数据库中那样存储图像更常见? 更新: 关于将图像存储在数据库中的优点和缺点的争论很多,大多数人认为这不是一种实用的方法。无论如何,在这里我假设我们将图像存储在数据库中,并讨论了这样做的最佳方

  • 问题内容: 很快的问题,在将数据插入数据库之前或之后调用(或)是一个更好的主意吗? 之前: 新的较长字符串将使我不得不更改数据库以在字段中保留较长的值。(可以更改为804个字符的字符串) 之后: 这将需要更多的服务器处理,并且在每个页面加载或AJAX加载中可能进行数百次调用。 太好了 检索结果时进行转换会大大降低我的代码速度吗?我应该更换数据库吗? 问题答案: 我建议将最原始的数据形式存储在数据库

  • 我正在使用react进行我的应用程序。我有一个,我想要一个背景图像。但我不能让它表现出来。 当我把它作为它工作得很好,但我听说我应该把它放在根目录下名为的文件夹中,所以它是,但这对我来说不适用,并且给了我: 您试图导入项目src/目录之外的.../image/bgimage.png。 有人能告诉我在reactJS中包含图像资产的正确方法吗?

  • 问题内容: 我有一个.jsp页面,其中有一个GUI表,该表显示来自Oracle数据库的记录。该表允许典型的分页行为,例如“ FIRST”,“ NEXT”,“ PREVIOUS”和“ LAST”。记录是从Java ResultSet对象获得的,该对象是从执行SQL语句返回的。 这个ResultSet可能很大,所以我的问题是: 如果我的ResultSet包含一百万条记录,但是我的表仅显示ResultS

  • 问题内容: 我已经阅读了许多有关 多维到单维 , 多维数据库 等的文章,但是所有答案都无济于事。我确实在Google上找到了很多文档,但是这些文档仅提供背景信息,而没有回答眼前的问题。 我有很多彼此相关的字符串。PHP脚本中需要它们。该结构是分层的。这是一个例子。 每个缩进在多维数组中都假定一个新级别。 目的是通过名称及其所有后代检索具有PHP的元素。例如,如果我查询A,我想接收一个包含的字符串数

  • 数据是非常小的,就像水果的列表,不会经常改变,也只有一个服务将使用这个数据和服务到其他服务,请提到您的方法的优点和缺点。