From 2ca1e6305c4f63ea0e5b8eb6363b50d586c665eb Mon Sep 17 00:00:00 2001 From: Redkale <8730487+redkale@users.noreply.github.com> Date: Mon, 27 Aug 2018 11:55:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9HttpResponse.finish(byte[])?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/org/redkale/net/http/HttpResponse.java | 39 +++++++++++++--------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/src/org/redkale/net/http/HttpResponse.java b/src/org/redkale/net/http/HttpResponse.java index 6446dd70f..9d5b3acc6 100644 --- a/src/org/redkale/net/http/HttpResponse.java +++ b/src/org/redkale/net/http/HttpResponse.java @@ -614,15 +614,7 @@ public class HttpResponse extends Response { */ @Override public void finish(final byte[] bs) { - if (isClosed()) return; //避免重复关闭 - if (this.context.getBufferCapacity() >= bs.length) { - ByteBuffer buffer = getBodyBufferSupplier().get(); - buffer.put(bs); - buffer.flip(); - this.finish(false, buffer); - } else { - this.finish(false, ByteBuffer.wrap(bs)); - } + this.finish(this.contentType, bs); } /** @@ -633,15 +625,30 @@ public class HttpResponse extends Response { */ public void finish(final String contentType, final byte[] bs) { if (isClosed()) return; //避免重复关闭 - this.contentType = contentType; - if (this.context.getBufferCapacity() >= bs.length) { - ByteBuffer buffer = getBodyBufferSupplier().get(); - buffer.put(bs); - buffer.flip(); - this.finish(false, buffer); + final byte[] content = bs == null ? new byte[0] : bs; + if (!this.headsended) { + this.contentType = contentType; + this.contentLength = content.length; + ByteBuffer headbuf = createHeader(); + if (headbuf.remaining() >= content.length) { + headbuf.put(content); + headbuf.flip(); + super.finish(false, headbuf); + } else { + headbuf.flip(); + super.finish(false, new ByteBuffer[]{headbuf, ByteBuffer.wrap(content)}); + } } else { - this.finish(false, ByteBuffer.wrap(bs)); + if (this.context.getBufferCapacity() >= content.length) { + ByteBuffer buffer = getBodyBufferSupplier().get(); + buffer.put(content); + buffer.flip(); + this.finish(false, buffer); + } else { + this.finish(false, ByteBuffer.wrap(content)); + } } + } /**