kafka消费的二进制流乱码,怎么样将二进制正确的打印显示或者写入到文件中
@KafkaListener(topics = "")
public void consumerStreamData(ConsumerRecord<?,?> record){
System.out.println("[stream] record ===================== \n" + record.value() + "\n offset =========================== " + record.offset());
}
设置你生产者和消费者消息的数据类型,参考如下:
private Map<String, Object> consumerProps() { Map<String, Object> props = new HashMap<>(); ... props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, IntegerDeserializer.class); props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); return props; } private Map<String, Object> senderProps() { Map<String, Object> props = new HashMap<>(); ... props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, IntegerSerializer.class); props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); return props; }
如果还是乱码,则查看idea控台默认的格式。
我想解决的是如何将读取的二进制数据写入到文件中
你得需要这样设置:
Map<String, Object> props = new HashMap<>(); ... props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, ByteArrayDeserializer.class); props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, ByteArrayDeserializer.class);
最后你需要知道你得字节定义,按照字节定义进行解析即可(比如:那哪几位一组,按照定义进行解析就行),不然你这样打印的肯定是乱码的
使用ByteArray进行序列化,输出的value为[B@294c79e1
你得这么解析,我这只是例子哈。
public boolean SaveSourceCodeBytes(List<byte[]> list, HTable table) throws Exception { try { int j = 0; for (int i = 0; i < list.size(); i++) { byte[] bytearray = list.get(i); byte[] id = new byte[8]; System.arraycopy(bytearray, 0, id, 0, 8); long terminal_id = CommonUtil.byteToLong(id);
特别感谢,我是接收数据的时候没有指定类型,所以会有错误,指定了类型就正确了,谢谢
public void newConsumerData(ConsumerRecord<String, byte[]> record) {}
你的答案