@NonNull @Override public Optional<String> extractHeader(@NonNull BufferedReader reader) throws IOException { final StringBuilder build = new StringBuilder(); String line = reader.readLine(); if (line == null) { return Optional.empty(); } if (!line.trim().startsWith(startSequence)) { return Optional.empty(); } line = line.substring(line.indexOf(startSequence) + startSequence.length()); if (handleSingleLine(build, line)) { for (line = reader.readLine(); line != null; line = reader.readLine()) { if (!handleSingleLine(build, line)) { break; } } } line = reader.readLine(); if (!(line == null || line.trim().isEmpty())) { // Require a blank line after a comment to make it a header return Optional.empty(); } if (build.length() > 0) { return Optional.of(build.toString()); } else { return Optional.empty(); } }