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:
@@ -95,7 +95,7 @@ public class BufferUtil {
|
||||
* @return 新的ByteBuffer
|
||||
*/
|
||||
public static ByteBuffer copy(final ByteBuffer src, final int start, final int end) {
|
||||
return copy(src, ByteBuffer.allocate(end - start));
|
||||
return ByteBuffer.wrap(Arrays.copyOfRange(src.array(), start, end));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -18,11 +18,12 @@ package cn.hutool.v7.core.io.buffer;
|
||||
|
||||
import cn.hutool.v7.core.text.StrUtil;
|
||||
import cn.hutool.v7.core.util.CharsetUtil;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
/**
|
||||
* BufferUtil单元测试
|
||||
*
|
||||
@@ -37,7 +38,7 @@ public class BufferUtilTest {
|
||||
final ByteBuffer buffer = ByteBuffer.wrap(bytes);
|
||||
|
||||
final ByteBuffer buffer2 = BufferUtil.copy(buffer, ByteBuffer.allocate(5));
|
||||
Assertions.assertEquals("AAABB", StrUtil.utf8Str(buffer2));
|
||||
assertEquals("AAABB", StrUtil.utf8Str(buffer2));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -46,7 +47,7 @@ public class BufferUtilTest {
|
||||
final ByteBuffer buffer = ByteBuffer.wrap(bytes);
|
||||
|
||||
final byte[] bs = BufferUtil.readBytes(buffer, 5);
|
||||
Assertions.assertEquals("AAABB", StrUtil.utf8Str(bs));
|
||||
assertEquals("AAABB", StrUtil.utf8Str(bs));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -55,7 +56,7 @@ public class BufferUtilTest {
|
||||
final ByteBuffer buffer = ByteBuffer.wrap(bytes);
|
||||
|
||||
final byte[] bs = BufferUtil.readBytes(buffer, 5);
|
||||
Assertions.assertEquals("AAABB", StrUtil.utf8Str(bs));
|
||||
assertEquals("AAABB", StrUtil.utf8Str(bs));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -65,17 +66,97 @@ public class BufferUtilTest {
|
||||
|
||||
// 第一行
|
||||
String line = BufferUtil.readLine(buffer, CharsetUtil.UTF_8);
|
||||
Assertions.assertEquals("aa", line);
|
||||
assertEquals("aa", line);
|
||||
|
||||
// 第二行
|
||||
line = BufferUtil.readLine(buffer, CharsetUtil.UTF_8);
|
||||
Assertions.assertEquals("bbb", line);
|
||||
assertEquals("bbb", line);
|
||||
|
||||
// 第三行因为没有行结束标志,因此返回null
|
||||
line = BufferUtil.readLine(buffer, CharsetUtil.UTF_8);
|
||||
Assertions.assertNull(line);
|
||||
assertNull(line);
|
||||
|
||||
// 读取剩余部分
|
||||
Assertions.assertEquals("cc", StrUtil.utf8Str(BufferUtil.readBytes(buffer)));
|
||||
assertEquals("cc", StrUtil.utf8Str(BufferUtil.readBytes(buffer)));
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试正常范围内的拷贝功能
|
||||
*/
|
||||
@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