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)
|
* 【extra 】 修复`MailAccount.setAuth`参数与field不一致问题(issue#4217@Github)
|
||||||
* 【core 】 修复`TransMap.computeIfAbsent`mappingFunction处理不一致问题(issue#IDM6UR@Gitee)
|
* 【core 】 修复`TransMap.computeIfAbsent`mappingFunction处理不一致问题(issue#IDM6UR@Gitee)
|
||||||
* 【core 】 修复`MultiResource`游标歧义问题(issue#IDNAOY@Gitee)
|
* 【core 】 修复`MultiResource`游标歧义问题(issue#IDNAOY@Gitee)
|
||||||
|
* 【core 】 修复`BufferUtil`copy歧义问题(issue#IDN097@Gitee)
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------
|
||||||
# 5.8.43(2026-01-04)
|
# 5.8.43(2026-01-04)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
|
|||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.CharBuffer;
|
import java.nio.CharBuffer;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link ByteBuffer} 工具类<br>
|
* {@link ByteBuffer} 工具类<br>
|
||||||
@@ -26,7 +27,7 @@ public class BufferUtil {
|
|||||||
* @return 新的ByteBuffer
|
* @return 新的ByteBuffer
|
||||||
*/
|
*/
|
||||||
public static ByteBuffer copy(ByteBuffer src, int start, int end) {
|
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;
|
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.ByteBuffer;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import org.junit.jupiter.api.Test;
|
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
||||||
|
|
||||||
import cn.hutool.core.util.CharsetUtil;
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BufferUtil单元测试
|
* BufferUtil单元测试
|
||||||
@@ -81,4 +82,84 @@ public class BufferUtilTest {
|
|||||||
// 再次调用工具类转换,输出结果应该不变
|
// 再次调用工具类转换,输出结果应该不变
|
||||||
assertEquals(originalText, StrUtil.str(buffer, StandardCharsets.UTF_8));
|
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