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

nifi+redis生成一个奇怪的缓存键/val-如何正确地序列化/反序列化?

曾皓
2023-03-14

我的Nifi处理器实现生成了一个奇怪的缓存键和值,类似于'\xac\xed\x00\x05t\x00\x06'的内容被前置到每个键/val。例如,插入'key':'val'生成“\xac\xed\x00\x05t\x00\x03key”:“\xac\xed\x00\x05t\x00\x03val”。

我没有spring配置可用于编辑或spring数据类,这都是在NIFI的实现中完成的。我所拥有和必须提供的就是序列化器和反序列化器:

void serialize(T value, OutputStream output) throws SerializationException, IOException;
T deserialize(byte[] input) throws DeserializationException, IOException;

例如,GetAndPutIfAbst方法如下所示:

cache.getAndPutIfAbsent(key, value, keySerializer, valueSerializer, valueDeserializer);

我的字节序列化/反序列化很简单:

 public static byte[] serialize(Object obj) throws IOException {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        ObjectOutputStream os = new ObjectOutputStream(out);
        os.writeObject(obj);
        return out.toByteArray();
    }

    public static Object deserialize(byte[] data) {
        if (data == null || data.length == 0) return null;
        try {
            ByteArrayInputStream in = new ByteArrayInputStream(data);
            ObjectInputStream is = new ObjectInputStream(in);
            return is.readObject();
        } catch (Exception e) {
            // log
        }
        return null;
    }

我的目标是在没有预置字符和工作一致的情况下获得密钥/瓦尔斯。我不能修补spring配置和类。如何进行?

共有1个答案

危寒
2023-03-14

对字符串使用以下de/serialization解决了这两个问题:

value.getBytes(StandardCharsets.UTF_8)
new String(value, StandardCharsets.UTF_8);

不知道为什么,但现在管用了。

 类似资料:
  • 问题内容: 我一直在尝试将对象序列化为CSV,但是该对象包含,并且不能在对象上使用。 预期样本输出 : 实际输出 : 这是我的代码 :(其中大多数是2个POJO) 我尝试的一切似乎都没有任何效果,但找不到有效的解决方案。 抱歉,我无缘无故留下的毫无意义的注释,如果您回答了代码,请随时删除它们。 问题答案: 从错误中,我想相信这与您的模式有关,该模式的列取自on 而不是值。 您可能想在其中添加,但是

  • 问题内容: 我注意到存储在Redis中的某些序列化对象在反序列化方面遇到问题。 当我对Redis中存储的对象类进行更改时,通常会发生这种情况。 我想了解问题,以便为解决方案设计一个清晰的方案。 我的问题是,什么导致反序列化问题?移除公共/私人财产会引起问题吗?也许添加新属性?向类添加新功能会产生问题吗?那么更多的构造函数呢? 在我的序列化对象中,我有一个属性Map,如果我更改(更新了一些属性,添加

  • 我以前从未使用过JSON,我想序列化

  • 奇怪的是下面的测试用例会失败。有人知道为什么吗?

  • 我是solr的新手,当我试图在Solr中序列化/反序列化一个Map时,我遇到了一个问题。 我在Java应用程序中使用Spring Data Solr,如下所示: 它在Solr中展平并序列化我地图,如下所示: 但是,当我运行搜索时,返回的对象始终将此字段设置为 NULL。反序列化不适用于此特定字段,看起来它无法识别键 1、键 2...作为地图的一部分。 有人知道如何使派生工作吗?我必须实现自定义转换

  • 问题内容: 我的直觉告诉我,必须以某种方式将其转换为字符串或byte [](在Go中甚至可能是相同的东西?),然后将其保存到磁盘。 我找到了这个包(http://golang.org/pkg/encoding/gob/),但似乎仅用于结构? 问题答案: 序列化数据有多种方法,Go为此提供了许多软件包。某些常见编码方式的软件包: 处理地图很好。以下示例显示了地图的编码/解码: 操场