优化ByteArray

This commit is contained in:
redkale
2023-04-11 08:11:14 +08:00
parent 3f244b2cff
commit 53e8f44088
2 changed files with 90 additions and 11 deletions

View File

@@ -1029,8 +1029,8 @@ public class HttpRequest extends Request<HttpContext> {
}
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);

View File

@@ -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;
}
/**
* 移除最后一个字节
*