public ReadableByteBuffer copy() { return new ReadableByteBuffer(buffer); }
public ReadableByteBuffer subBuffer(int offset) { return subBuffer(offset, end - offset); }
public ReadableByteBuffer subBuffer(int offset, int length) { ReadableByteBuffer bb = copy(); if (offset + length + start > end) throw new IndexOutOfBoundsException("offset+length must be <= current length: " + (start + offset + length) + " <= " + end); if (offset < 0) throw new IllegalArgumentException("offset must be >= 0: " + offset); if (length < 0) throw new IllegalArgumentException("length must be >= 0: " + length); bb.start = start + offset; bb.position = bb.start; bb.end = bb.start + length; return bb; }
response.appendHeader(Header.KEY_LAST_MODIFIED, fileHolder.lastModified); response.appendHeader(Header.KEY_CACHE_CONTROL, MAX_AGE_1_YEAR); response.appendHeader(Header.KEY_CONTENT_LENGTH, String.valueOf(buffer.length())); range = new Range(0, buffer.length() - 1, buffer.length()); } else { response.appendHeader(Header.KEY_CONTENT_LENGTH, String.valueOf(file.length())); response.setBody(buffer.subBuffer((int) range.from, (int) range.length())); else response.setBody(new ReadableFile(file, range.from, range.length()));
@Override public int read(ByteBuffer bb) { if (bb != buffer.buffer()) { if (bb.isDirect()) { int r = Math.min(bb.remaining(), end - position); EpollCore.arraycopy(buffer.buffer(), position, bb, bb.position(), r); bb.position(r + bb.position()); position += r; return r; } else { byte[] bytes = bb.array(); int offset = bb.arrayOffset(); buffer.offset(position); int l = bytes.length - offset; l = Math.min(l, end - position); buffer.buffer().position(position); buffer.buffer().get(bytes, offset, l); position += l; bb.position(bb.position() + l); return l; } } else { return readSelf(); } }
@Override public int read(ByteBufferWrapper bb) { if (bb.buffer() != buffer.buffer()) { int r = Math.min(bb.remaining(), end - position); EpollCore.copy(buffer, position, bb, bb.position(), r); bb.position(r + bb.position()); position += r; return r; } else { return readSelf(); } }
protected FileHolder createFileHolder(String path, boolean gzip) throws IOException { byte[] bytes = FileTools.bytes(path); ReadableByteBuffer gzipped = null; if (gzip) { ByteArrayOutputStream out = new ByteArrayOutputStream(bytes.length); GZIPOutputStream gout = new GZIPOutputStream(out); gout.write(bytes); gout.close(); byte[] byteArray = out.toByteArray(); ByteBuffer buffer = ByteBuffer.allocateDirect(byteArray.length); buffer.put(byteArray); buffer.flip(); gzipped = new ReadableByteBuffer(buffer); } ByteBuffer buffer = ByteBuffer.allocateDirect(bytes.length); buffer.put(bytes); buffer.flip(); String lastModified = HttpDateFormatterHolder.get().format(new Date(new File(path).lastModified())); String md5 = MD5.create().update(bytes).asString().toUpperCase(); return new FileHolder(new ReadableByteBuffer(buffer), md5, lastModified, gzipped); }
public ReadableByteBuffer buildStaticResponse() { return new ReadableByteBuffer(new ByteBufferWrapper(toReadableBytes())); }