private void doServeRangePartHeader(final OutputStream outputStream, final String boundary, final String contentType, final long totalLength, final Range range) throws IOException { RangePartHeader rangePartHeader = new RangePartHeader(range, boundary, contentType, totalLength); byte[] rangePartHeaderBytes = rangePartHeaderSerializer.serialize(rangePartHeader).getBytes(StandardCharsets.UTF_8); serveMultiRangeStream(new ByteArrayInputStream(rangePartHeaderBytes), outputStream); }
String partHeader = serialize(new RangePartHeader(new Range(0L, 0L), boundary, contentType, 0L)); int partHeaderWithoutDigits = partHeader.length() - RANGE_DIGITS_LENGTH;
private int appendRangePartHeader(byte[] output, int destPos, Range range) { RangePartHeader rangePartHeader = new RangePartHeader(range, BOUNDARY, CONTENT_TYPE, TOTAL_LENGTH); byte[] slice = (NEW_LINE + rangePartHeaderSerializer.serialize(rangePartHeader)) .getBytes(StandardCharsets.UTF_8); System.arraycopy(slice, 0, output, destPos, slice.length); return slice.length; }
@Test public void shouldSerializeRangeProperly() { Range range = new Range(333L, 1234L); String boundary = "BBBOOUUNNNDDAARRYY"; String contentType = "application/pdf"; long totalLength = 12345L; RangePartHeader rangePartHeader = new RangePartHeader(range, boundary, contentType, totalLength); String serialized = rangePartHeaderSerializer.serialize(rangePartHeader); assertThat(serialized, startsWith("--" + boundary + "\r\n")); assertThat(serialized, endsWith("\r\n\r\n")); assertThat(serialized, containsString("\r\nContent-Type: " + contentType + "\r\n")); assertThat(serialized, containsString("\r\nContent-Range: bytes 333-1234/12345\r\n")); }
@Test public void shouldReturnLengthForMultipleRanges() { Range range = new Range(333L, 1234L); String boundary = "BBBOOUUNNNDDAARRYY"; String contentType = "application/pdf"; long totalLength = 12345L; RangePartHeader rangePartHeader = new RangePartHeader(range, boundary, contentType, totalLength); String serialized = rangePartHeaderSerializer.serialize(rangePartHeader); long serializedLength = serialized.length(); long computedLength = rangePartHeaderSerializer.getPartHeadersLength(Arrays.asList(range, range), boundary, contentType, totalLength); long firstLineLength = "\r\n".length(); long lastLineLength = ("\r\n--" + boundary + "--\r\n\r\n").length(); assertThat(computedLength, is(firstLineLength + 2 * serializedLength + lastLineLength)); } }