private static boolean entityTagMatches(String entityTag, String ifNoneMatch) {
        for (String candidate : etagSplitter.split(ifNoneMatch)) {
            final String candidateETag = extractEntityTag(candidate);
            if (entityTag.equals(candidateETag)) {
                return true;
            }
        }

        return false;
    }
Returns a new {@link HttpResponse} which streams the content of the file which follows the specified
{@link ResponseHeaders}.

@param headers the {@link ResponseHeaders}
@param length the content length. The returned {@link HttpResponse} must stream only as many bytes as
              this value.
@param fileReadExecutor the {@link Executor} which should be used for performing a blocking file I/O
@param alloc the {@link ByteBufAllocator} which should be used for allocating an input buffer

@return the {@link HttpResponse}, or {@code null} if the file does not exist.
@throws IOException if failed to open the file. Note that an I/O error which occurred during content
                    streaming will be notified via the returned {@link HttpResponse}'s error
                    notification mechanism.
core/src/main/java/com/linecorp/armeria/server/file/AbstractHttpFile.java