gpt4 book ai didi

java - Avro:序列化/反序列化包含 Enum 值的文件时出现 ClassCastException

转载 作者:行者123 更新时间:2023-12-02 10:50:27 24 4
gpt4 key购买 nike

当我尝试反序列化以前序列化的文件时,出现以下错误:

Exception in thread "main" java.lang.ClassCastException: 
com.ssgg.bioinfo.effect.Sample$Zygosity cannot be cast to
com.ssgg.bioinfo.effect.Sample$.Zygosity
at com.ssgg.ZygosityTest.deserializeZygosityToAvroStructure(ZygosityTest.java:45)
at com.ssgg.ZygosityTest.main(ZygosityTest.java:30)

为了重现错误,主类如下:

public class ZygosityTest {

public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {

String filepath = "/home/XXXX/zygosity.avro";

/* Populate Zygosity*/
com.ssgg.bioinfo.effect.Sample$.Zygosity zygosity = com.ssgg.bioinfo.effect.Sample$.Zygosity.HET;

/* Create file serialized */
createZygositySerialized(zygosity, filepath);

/* Deserializae file */
com.ssgg.bioinfo.effect.Sample$.Zygosity avroZygosityOutput = deserializeZygosityToAvroStructure(filepath);

}

private static com.ssgg.bioinfo.effect.Sample$.Zygosity deserializeZygosityToAvroStructure(String filepath)
throws IOException {
com.ssgg.bioinfo.effect.Sample$.Zygosity zygosity = null;

File myFile = new File(filepath);
DatumReader<com.ssgg.bioinfo.effect.Sample$.Zygosity> reader = new SpecificDatumReader<com.ssgg.bioinfo.effect.Sample$.Zygosity>(
com.ssgg.bioinfo.effect.Sample$.Zygosity.class);
DataFileReader<com.ssgg.bioinfo.effect.Sample$.Zygosity> dataFileReader = new DataFileReader<com.ssgg.bioinfo.effect.Sample$.Zygosity>(
myFile, reader);

while (dataFileReader.hasNext()) {
zygosity = dataFileReader.next(zygosity);
}

dataFileReader.close();
return zygosity;
}

private static void createZygositySerialized(com.ssgg.bioinfo.effect.Sample$.Zygosity zygosity, String filepath)
throws IOException {
DatumWriter<com.ssgg.bioinfo.effect.Sample$.Zygosity> datumWriter = new SpecificDatumWriter<com.ssgg.bioinfo.effect.Sample$.Zygosity>(
com.ssgg.bioinfo.effect.Sample$.Zygosity.class);
DataFileWriter<com.ssgg.bioinfo.effect.Sample$.Zygosity> fileWriter = new DataFileWriter<com.ssgg.bioinfo.effect.Sample$.Zygosity>(
datumWriter);

Schema schema = com.ssgg.bioinfo.effect.Sample$.Zygosity.getClassSchema();

fileWriter.create(schema, new File(filepath));
fileWriter.append(zygosity);
fileWriter.close();
}

}

avro 为 Zygosity 生成的枚举如下:

/**
* Autogenerated by Avro
*
* DO NOT EDIT DIRECTLY
*/
package com.ssgg.bioinfo.effect.Sample$;
@SuppressWarnings("all")
@org.apache.avro.specific.AvroGenerated
public enum Zygosity {
HOM_REF, HET, HOM_VAR, HEMI, UNK ;
public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"enum\",\"name\":\"Zygosity\",\"namespace\":\"com.ssgg.bioinfo.effect.Sample$\",\"symbols\":[\"HOM_REF\",\"HET\",\"HOM_VAR\",\"HEMI\",\"UNK\"]}");
public static org.apache.avro.Schema getClassSchema() { return SCHEMA$; }

}

我是 Avro 的新手,有人可以帮我找到问题吗?在我的项目中,我尝试序列化和反序列化更大的结构,但我在枚举方面遇到问题,所以我在这里隔离了一个较小的问题。如果您需要更多信息,我可以发布它。谢谢。

最佳答案

我认为这里的主要问题是 $ 在 Java 类中具有特殊含义,不太重要的是包名称通常是小写的。

因此,您至少应该编辑命名空间以删除 $

关于java - Avro:序列化/反序列化包含 Enum 值的文件时出现 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52225737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com