mirror of
https://gitee.com/dromara/hutool.git
synced 2026-02-09 09:16:26 +08:00
修复BufferUtilcopy歧义问题(issue#IDN097@Gitee)
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
* 【extra 】 修复`MailAccount.setAuth`参数与field不一致问题(issue#4217@Github)
|
||||
* 【core 】 修复`TransMap.computeIfAbsent`mappingFunction处理不一致问题(issue#IDM6UR@Gitee)
|
||||
* 【core 】 修复`MultiResource`游标歧义问题(issue#IDNAOY@Gitee)
|
||||
* 【core 】 修复`BufferUtil`copy歧义问题(issue#IDN097@Gitee)
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
# 5.8.43(2026-01-04)
|
||||
|
||||
@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.CharBuffer;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* {@link ByteBuffer} 工具类<br>
|
||||
@@ -26,7 +27,7 @@ public class BufferUtil {
|
||||
* @return 新的ByteBuffer
|
||||
*/
|
||||
public static ByteBuffer copy(ByteBuffer src, int start, int end) {
|
||||
return copy(src, ByteBuffer.allocate(end - start));
|
||||
return ByteBuffer.wrap(Arrays.copyOfRange(src.array(), start, end));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
package cn.hutool.core.io;
|
||||
|
||||
import cn.hutool.core.util.CharsetUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import cn.hutool.core.util.CharsetUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
||||
|
||||
/**
|
||||
* BufferUtil单元测试
|
||||
@@ -81,4 +82,84 @@ public class BufferUtilTest {
|
||||
// 再次调用工具类转换,输出结果应该不变
|
||||
assertEquals(originalText, StrUtil.str(buffer, StandardCharsets.UTF_8));
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试正常范围内的拷贝功能
|
||||
*/
|
||||
@Test
|
||||
public void copyNormalRangeTest() {
|
||||
// 准备测试数据
|
||||
final byte[] originalData = {65, 66, 67, 68, 69, 70}; // 对应 "ABCDEF"
|
||||
final ByteBuffer srcBuffer = ByteBuffer.wrap(originalData);
|
||||
|
||||
// 执行拷贝操作,从索引1到4(不包含4),即拷贝BCD
|
||||
final ByteBuffer resultBuffer = BufferUtil.copy(srcBuffer, 1, 4);
|
||||
|
||||
// 验证结果
|
||||
final byte[] resultArray = new byte[3];
|
||||
resultBuffer.get(resultArray);
|
||||
assertArrayEquals(new byte[]{66, 67, 68}, resultArray); // BCD
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试从开头开始拷贝
|
||||
*/
|
||||
@Test
|
||||
public void copyFromStartTest() {
|
||||
final byte[] originalData = {65, 66, 67, 68, 69, 70}; // 对应 "ABCDEF"
|
||||
final ByteBuffer srcBuffer = ByteBuffer.wrap(originalData);
|
||||
|
||||
// 从索引0拷贝到3,即拷贝ABC
|
||||
final ByteBuffer resultBuffer = BufferUtil.copy(srcBuffer, 0, 3);
|
||||
|
||||
final byte[] resultArray = new byte[3];
|
||||
resultBuffer.get(resultArray);
|
||||
assertArrayEquals(new byte[]{65, 66, 67}, resultArray); // ABC
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试拷贝到末尾
|
||||
*/
|
||||
@Test
|
||||
public void copyToEndTest() {
|
||||
final byte[] originalData = {65, 66, 67, 68, 69, 70}; // 对应 "ABCDEF"
|
||||
final ByteBuffer srcBuffer = ByteBuffer.wrap(originalData);
|
||||
|
||||
// 从索引3拷贝到末尾,即拷贝DEF
|
||||
final ByteBuffer resultBuffer = BufferUtil.copy(srcBuffer, 3, 6);
|
||||
|
||||
final byte[] resultArray = new byte[3];
|
||||
resultBuffer.get(resultArray);
|
||||
assertArrayEquals(new byte[]{68, 69, 70}, resultArray); // DEF
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试空拷贝(start等于end)
|
||||
*/
|
||||
@Test
|
||||
public void copyEmptyRangeTest() {
|
||||
final byte[] originalData = {65, 66, 67, 68, 69, 70}; // 对应 "ABCDEF"
|
||||
final ByteBuffer srcBuffer = ByteBuffer.wrap(originalData);
|
||||
|
||||
// 拷贝相同起始和结束位置,应该得到空数组
|
||||
final ByteBuffer resultBuffer = BufferUtil.copy(srcBuffer, 2, 2);
|
||||
|
||||
assertEquals(0, resultBuffer.remaining()); // 应该为空
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试整个数组的拷贝
|
||||
*/
|
||||
@Test
|
||||
public void copyFullRangeTest() {
|
||||
final byte[] originalData = {65, 66, 67, 68, 69, 70}; // 对应 "ABCDEF"
|
||||
final ByteBuffer srcBuffer = ByteBuffer.wrap(originalData);
|
||||
|
||||
// 拷贝整个数组
|
||||
final ByteBuffer resultBuffer = BufferUtil.copy(srcBuffer, 0, 6);
|
||||
|
||||
final byte[] resultArray = new byte[6];
|
||||
resultBuffer.get(resultArray);
|
||||
assertArrayEquals(originalData, resultArray);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user