/** * Adds a {@link Schema} that can be used to decode buffers. * * @param writeSchema a {@link Schema} to use when decoding buffers */ public void addSchema(Schema writeSchema) { long fp = SchemaNormalization.parsingFingerprint64(writeSchema); codecByFingerprint.put(fp, new RawMessageDecoder<D>(model, writeSchema, readSchema)); }
@Override public D decode(InputStream stream, D reuse) throws IOException { byte[] header = HEADER_BUFFER.get(); try { if (!readFully(stream, header)) { throw new BadHeaderException("Not enough header bytes"); } } catch (IOException e) { throw new IOException("Failed to read header and fingerprint bytes", e); } if (BinaryMessageEncoder.V1_HEADER[0] != header[0] || BinaryMessageEncoder.V1_HEADER[1] != header[1]) { throw new BadHeaderException(String.format( "Unrecognized header bytes: 0x%02X 0x%02X", header[0], header[1])); } RawMessageDecoder<D> decoder = getDecoder(FP_BUFFER.get().getLong(2)); return decoder.decode(stream, reuse); }
RawMessageDecoder<T> decoder = new RawMessageDecoder<>(ReflectData.get(), writeSchema, schema); try { return decoder.decode(buffer.slice(), null); } catch (IOException | IndexOutOfBoundsException e) { throw new IllegalArgumentException(e);
/** * Adds a {@link Schema} that can be used to decode buffers. * * @param writeSchema a {@link Schema} to use when decoding buffers */ public void addSchema(Schema writeSchema) { long fp = SchemaNormalization.parsingFingerprint64(writeSchema); codecByFingerprint.put(fp, new RawMessageDecoder<>(model, writeSchema, readSchema)); }
@Override public D decode(InputStream stream, D reuse) throws IOException { byte[] header = HEADER_BUFFER.get(); try { if (!readFully(stream, header)) { throw new BadHeaderException("Not enough header bytes"); } } catch (IOException e) { throw new IOException("Failed to read header and fingerprint bytes", e); } if (BinaryMessageEncoder.V1_HEADER[0] != header[0] || BinaryMessageEncoder.V1_HEADER[1] != header[1]) { throw new BadHeaderException(String.format( "Unrecognized header bytes: 0x%02X 0x%02X", header[0], header[1])); } RawMessageDecoder<D> decoder = getDecoder(FP_BUFFER.get().getLong(2)); return decoder.decode(stream, reuse); }
/** * Adds a {@link Schema} that can be used to decode buffers. * * @param writeSchema a {@link Schema} to use when decoding buffers */ public void addSchema(Schema writeSchema) { long fp = SchemaNormalization.parsingFingerprint64(writeSchema); codecByFingerprint.put(fp, new RawMessageDecoder<D>(model, writeSchema, readSchema)); }
@Override public T decode(byte[] data) { try { return decoder.decode(data, null); } catch (IOException | IndexOutOfBoundsException e) { throw new IllegalArgumentException(e); } } }
public AvroBinaryCodec(Class<T> messageClass) { this.messageClass = messageClass; schema = ReflectData.get().getSchema(messageClass); encoder = new RawMessageEncoder<>(ReflectData.get(), schema); decoder = new RawMessageDecoder<>(ReflectData.get(), schema); }
@Override public D decode(InputStream stream, D reuse) throws IOException { byte[] header = HEADER_BUFFER.get(); try { if (!readFully(stream, header)) { throw new BadHeaderException("Not enough header bytes"); } } catch (IOException e) { throw new IOException("Failed to read header and fingerprint bytes", e); } if (BinaryMessageEncoder.V1_HEADER[0] != header[0] || BinaryMessageEncoder.V1_HEADER[1] != header[1]) { throw new BadHeaderException(String.format( "Unrecognized header bytes: 0x%02X 0x%02X", header[0], header[1])); } RawMessageDecoder<D> decoder = getDecoder(FP_BUFFER.get().getLong(2)); return decoder.decode(stream, reuse); }