From 53e8f440884f9bd1660dfee6e5f1c39715f83158 Mon Sep 17 00:00:00 2001 From: redkale Date: Tue, 11 Apr 2023 08:11:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96ByteArray?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/redkale/net/http/HttpRequest.java | 4 +- src/main/java/org/redkale/util/ByteArray.java | 97 +++++++++++++++++-- 2 files changed, 90 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/redkale/net/http/HttpRequest.java b/src/main/java/org/redkale/net/http/HttpRequest.java index 648e08142..908d02de6 100644 --- a/src/main/java/org/redkale/net/http/HttpRequest.java +++ b/src/main/java/org/redkale/net/http/HttpRequest.java @@ -1029,8 +1029,8 @@ public class HttpRequest extends Request { } Charset charset = this.context.getCharset(); int limit = offset + len; - int keypos = array.find(offset, limit, '='); - int valpos = array.find(offset, limit, '&'); + int keypos = array.indexOf(offset, limit, '='); + int valpos = array.indexOf(offset, limit, '&'); if (keypos <= 0 || (valpos >= 0 && valpos < keypos)) { if (valpos > 0) { addParameter(array, body, valpos + 1, limit - valpos - 1); diff --git a/src/main/java/org/redkale/util/ByteArray.java b/src/main/java/org/redkale/util/ByteArray.java index 8c12425b2..d27517876 100644 --- a/src/main/java/org/redkale/util/ByteArray.java +++ b/src/main/java/org/redkale/util/ByteArray.java @@ -441,8 +441,8 @@ public final class ByteArray implements ByteTuple { * * @return 所在位置 */ - public int find(byte value) { - return find(0, value); + public int indexOf(byte value) { + return indexOf(0, value); } /** @@ -453,8 +453,8 @@ public final class ByteArray implements ByteTuple { * * @return 所在位置 */ - public int find(int offset, char value) { - return find(offset, (byte) value); + public int indexOf(int offset, char value) { + return indexOf(offset, (byte) value); } /** @@ -465,8 +465,8 @@ public final class ByteArray implements ByteTuple { * * @return 所在位置 */ - public int find(int offset, byte value) { - return find(offset, -1, value); + public int indexOf(int offset, byte value) { + return indexOf(offset, -1, value); } /** @@ -478,8 +478,8 @@ public final class ByteArray implements ByteTuple { * * @return 所在位置 */ - public int find(int offset, int limit, char value) { - return find(offset, limit, (byte) value); + public int indexOf(int offset, int limit, char value) { + return indexOf(offset, limit, (byte) value); } /** @@ -491,7 +491,7 @@ public final class ByteArray implements ByteTuple { * * @return 所在位置 */ - public int find(int offset, int limit, byte value) { + public int indexOf(int offset, int limit, byte value) { byte[] bytes = this.content; int end = limit > 0 ? limit : count; for (int i = offset; i < end; i++) { @@ -502,6 +502,85 @@ public final class ByteArray implements ByteTuple { return -1; } + /** + * 查找指定值第一次出现的位置,没有返回-1 + * + * @param value 查询值 + * + * @return 所在位置 + */ + public int lastIndexOf(byte value) { + return lastIndexOf(count - 1, value); + } + + /** + * 查找指定值第一次出现的位置,没有返回-1 + * + * @param value 查询值 + * + * @return 所在位置 + */ + public int lastIndexOf(char value) { + return lastIndexOf(count - 1, (byte) value); + } + + /** + * 从指定的起始位置查询value值出现的位置,没有返回-1 + * + * @param offset 起始位置 + * @param value 查询值 + * + * @return 所在位置 + */ + public int lastIndexOf(int offset, char value) { + return lastIndexOf(offset, (byte) value); + } + + /** + * 从指定的起始位置查询value值出现的位置,没有返回-1 + * + * @param offset 起始位置 + * @param value 查询值 + * + * @return 所在位置 + */ + public int lastIndexOf(int offset, byte value) { + return lastIndexOf(offset, -1, value); + } + + /** + * 从指定的起始位置和长度查询value值出现的位置,没有返回-1 + * + * @param offset 起始位置 + * @param length 长度限制 + * @param value 查询值 + * + * @return 所在位置 + */ + public int lastIndexOf(int offset, int length, char value) { + return lastIndexOf(offset, length, (byte) value); + } + + /** + * 从指定的起始位置和长度查询value值出现的位置,没有返回-1 + * + * @param offset 起始位置 + * @param length 长度限制 + * @param value 查询值 + * + * @return 所在位置 + */ + public int lastIndexOf(int offset, int length, byte value) { + byte[] bytes = this.content; + int end = length <= 0 || length >= offset ? 0 : (offset - length); + for (int i = offset; i >= end; i--) { + if (bytes[i] == value) { + return i; + } + } + return -1; + } + /** * 移除最后一个字节 *