sách gpt4 ai đã đi

java - 从字节反序列化 Avro 数据

In lại 作者:行者123 更新时间:2023-12-05 07:12:02 26 4
mua khóa gpt4 Nike

我正在尝试反序列化,即从字节数组 Avro 数据中获取类 org.apache.avro.generic.GenericRecord 的对象。此数据包含带有完整架构的 header 。

到目前为止,我已经试过了:

public List deserializeGenericWithSchema(byte[] message) throws IOException {
List listOfRecords = new ArrayList<>();
DatumReader reader = new GenericDatumReader<>();
DataFileReader fileReader =
new DataFileReader<>(new SeekableByteArrayInput(message), reader);

GenericRecord record = null;

while (fileReader.hasNext()) {
listOfRecords.add(fileReader.next(record));
}

return listOfRecords;
}

但是我得到一个错误:

java.io.IOException: Invalid int encoding at

org.apache.avro.io.BinaryDecoder.readInt(BinaryDecoder.java:145) at

org.apache.avro.io.BinaryDecoder.readBytes(BinaryDecoder.java:282) at

org.apache.avro.file.DataFileStream.initialize(DataFileStream.java:112)

at org.apache.avro.file.DataFileReader.(DataFileReader.java:97)

但是,如果我将字节数组写入磁盘 tin nhắn 并像这样更改我的函数:

public List deserializeGenericWithSchema(String fileName) throws IOException {
byte[] file = new File(fileName);
List listOfRecords = new ArrayList<>();
DatumReader reader = new GenericDatumReader<>();
DataFileReader fileReader =
new DataFileReader<>(file, reader);

GenericRecord record = null;

while (fileReader.hasNext()) {
listOfRecords.add(fileReader.next(record));
}

return listOfRecords;
}

它完美地工作。我真的不想将收到的每条 avro 消息都写入磁盘,因为这是为了实时工作。

我的第一种方法做错了什么?

1 Câu trả lời

你有任何跟进这个问题吗?我的假设是编码问题。 byte[] 从哪里来?它是您要写入磁盘的确切 byte[] 吗?也许解释是关于文件编写器和读取器的默认编码设置。

关于java - 从字节反序列化 Avro 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60553129/

26 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com