All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.xbib.helianthus.common.http.DefaultHttpData Maven / Gradle / Ivy

package org.xbib.helianthus.common.http;

import java.util.Arrays;

/**
 * Default {@link HttpData} implementation.
 */
final class DefaultHttpData implements HttpData {

    private final byte[] data;
    private final int offset;
    private final int length;
    private final boolean endOfStream;

    DefaultHttpData(byte[] data, int offset, int length, boolean endOfStream) {
        this.data = data;
        this.offset = offset;
        this.length = length;
        this.endOfStream = endOfStream;
    }

    @Override
    public byte[] array() {
        return data;
    }

    @Override
    public int offset() {
        return offset;
    }

    @Override
    public int length() {
        return length;
    }

    @Override
    public boolean isEndOfStream() {
        return endOfStream;
    }

    @Override
    public int hashCode() {
        final int end = offset + length;
        int hash = 1;
        for (int i = offset; i < end; i++) {
            hash = hash * 31 + data[i];
        }
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof HttpData)) {
            return false;
        }

        if (this == obj) {
            return true;
        }

        final HttpData that = (HttpData) obj;
        if (length() != that.length()) {
            return false;
        }

        final int endOffset = offset + length;
        for (int i = offset, j = that.offset(); i < endOffset; i++, j++) {
            if (data[i] != data[j]) {
                return false;
            }
        }

        return true;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("offset=").append(offset)
                .append(",length=").append(length)
                .append(",array=").append(Arrays.toString(data));
        return sb.toString();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy