/** * @param additionalHeaders Allow segments to pass custom header data */ public static void writeHeader(ByteBuffer out, CommitLogDescriptor descriptor, Map<String, String> additionalHeaders) { CRC32 crc = new CRC32(); out.putInt(descriptor.version); updateChecksumInt(crc, descriptor.version); out.putLong(descriptor.id); updateChecksumInt(crc, (int) (descriptor.id & 0xFFFFFFFFL)); updateChecksumInt(crc, (int) (descriptor.id >>> 32)); if (descriptor.version >= VERSION_22) { String parametersString = constructParametersString(descriptor.compression, descriptor.encryptionContext, additionalHeaders); byte[] parametersBytes = parametersString.getBytes(StandardCharsets.UTF_8); if (parametersBytes.length != (((short) parametersBytes.length) & 0xFFFF)) throw new ConfigurationException(String.format("Compression parameters too long, length %d cannot be above 65535.", parametersBytes.length)); out.putShort((short) parametersBytes.length); updateChecksumInt(crc, parametersBytes.length); out.put(parametersBytes); crc.update(parametersBytes, 0, parametersBytes.length); } else assert descriptor.compression == null; out.putInt((int) crc.getValue()); }
/** * @param additionalHeaders Allow segments to pass custom header data */ public static void writeHeader(ByteBuffer out, CommitLogDescriptor descriptor, Map<String, String> additionalHeaders) { CRC32 crc = new CRC32(); out.putInt(descriptor.version); updateChecksumInt(crc, descriptor.version); out.putLong(descriptor.id); updateChecksumInt(crc, (int) (descriptor.id & 0xFFFFFFFFL)); updateChecksumInt(crc, (int) (descriptor.id >>> 32)); if (descriptor.version >= VERSION_22) { String parametersString = constructParametersString(descriptor.compression, descriptor.encryptionContext, additionalHeaders); byte[] parametersBytes = parametersString.getBytes(StandardCharsets.UTF_8); if (parametersBytes.length != (((short) parametersBytes.length) & 0xFFFF)) throw new ConfigurationException(String.format("Compression parameters too long, length %d cannot be above 65535.", parametersBytes.length)); out.putShort((short) parametersBytes.length); updateChecksumInt(crc, parametersBytes.length); out.put(parametersBytes); crc.update(parametersBytes, 0, parametersBytes.length); } else assert descriptor.compression == null; out.putInt((int) crc.getValue()); }
/** * @param additionalHeaders Allow segments to pass custom header data */ public static void writeHeader(ByteBuffer out, CommitLogDescriptor descriptor, Map<String, String> additionalHeaders) { CRC32 crc = new CRC32(); out.putInt(descriptor.version); updateChecksumInt(crc, descriptor.version); out.putLong(descriptor.id); updateChecksumInt(crc, (int) (descriptor.id & 0xFFFFFFFFL)); updateChecksumInt(crc, (int) (descriptor.id >>> 32)); if (descriptor.version >= VERSION_22) { String parametersString = constructParametersString(descriptor.compression, descriptor.encryptionContext, additionalHeaders); byte[] parametersBytes = parametersString.getBytes(StandardCharsets.UTF_8); if (parametersBytes.length != (((short) parametersBytes.length) & 0xFFFF)) throw new ConfigurationException(String.format("Compression parameters too long, length %d cannot be above 65535.", parametersBytes.length)); out.putShort((short) parametersBytes.length); updateChecksumInt(crc, parametersBytes.length); out.put(parametersBytes); crc.update(parametersBytes, 0, parametersBytes.length); } else assert descriptor.compression == null; out.putInt((int) crc.getValue()); }