Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
sesemomo
spring-framework
提交
090bfa63
S
spring-framework
项目概览
sesemomo
/
spring-framework
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
spring-framework
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
090bfa63
编写于
7月 19, 2019
作者:
A
Arjen Poutsma
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add DataBuffer::toString(Charset)
Closes gh-23317
上级
c8704ce4
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
97 addition
and
0 deletion
+97
-0
spring-core/src/main/java/org/springframework/core/io/buffer/DataBuffer.java
...n/java/org/springframework/core/io/buffer/DataBuffer.java
+24
-0
spring-core/src/main/java/org/springframework/core/io/buffer/DefaultDataBuffer.java
...org/springframework/core/io/buffer/DefaultDataBuffer.java
+23
-0
spring-core/src/main/java/org/springframework/core/io/buffer/NettyDataBuffer.java
...a/org/springframework/core/io/buffer/NettyDataBuffer.java
+12
-0
spring-core/src/test/java/org/springframework/core/io/buffer/DataBufferTests.java
...a/org/springframework/core/io/buffer/DataBufferTests.java
+38
-0
未找到文件。
spring-core/src/main/java/org/springframework/core/io/buffer/DataBuffer.java
浏览文件 @
090bfa63
...
...
@@ -355,4 +355,28 @@ public interface DataBuffer {
*/
OutputStream
asOutputStream
();
/**
* Return this buffer's data a String using the specified charset. Default implementation
* delegates to {@code toString(readPosition(), readableByteCount(), charset)}.
*
* @param charset the character set to use
* @return a string representation of all this buffers data
* @since 5.2
*/
default
String
toString
(
Charset
charset
)
{
Assert
.
notNull
(
charset
,
"Charset must not be null"
);
return
toString
(
readPosition
(),
readableByteCount
(),
charset
);
}
/**
* Return a part of this buffer's data as a String using the specified charset.
*
* @param index the index at which to start the string
* @param length the number of bytes to use for the string
* @param charset the charset to use
* @return a string representation of a part of this buffers data
* @since 5.2
*/
String
toString
(
int
index
,
int
length
,
Charset
charset
);
}
spring-core/src/main/java/org/springframework/core/io/buffer/DefaultDataBuffer.java
浏览文件 @
090bfa63
...
...
@@ -21,6 +21,7 @@ import java.io.InputStream;
import
java.io.OutputStream
;
import
java.nio.Buffer
;
import
java.nio.ByteBuffer
;
import
java.nio.charset.Charset
;
import
java.util.Arrays
;
import
java.util.function.IntPredicate
;
...
...
@@ -381,6 +382,28 @@ public class DefaultDataBuffer implements DataBuffer {
}
@Override
public
String
toString
(
int
index
,
int
length
,
Charset
charset
)
{
checkIndex
(
index
,
length
);
Assert
.
notNull
(
charset
,
"Charset must not be null"
);
byte
[]
bytes
;
int
offset
;
if
(
this
.
byteBuffer
.
hasArray
())
{
bytes
=
this
.
byteBuffer
.
array
();
offset
=
this
.
byteBuffer
.
arrayOffset
()
+
index
;
}
else
{
bytes
=
new
byte
[
length
];
offset
=
0
;
ByteBuffer
duplicate
=
this
.
byteBuffer
.
duplicate
();
duplicate
.
clear
().
position
(
index
).
limit
(
index
+
length
);
duplicate
.
get
(
bytes
,
0
,
length
);
}
return
new
String
(
bytes
,
offset
,
length
,
charset
);
}
/**
* Calculate the capacity of the buffer.
* @see io.netty.buffer.AbstractByteBufAllocator#calculateNewCapacity(int, int)
...
...
spring-core/src/main/java/org/springframework/core/io/buffer/NettyDataBuffer.java
浏览文件 @
090bfa63
...
...
@@ -293,6 +293,18 @@ public class NettyDataBuffer implements PooledDataBuffer {
return
new
ByteBufOutputStream
(
this
.
byteBuf
);
}
@Override
public
String
toString
(
Charset
charset
)
{
Assert
.
notNull
(
charset
,
"Charset must not be null"
);
return
this
.
byteBuf
.
toString
(
charset
);
}
@Override
public
String
toString
(
int
index
,
int
length
,
Charset
charset
)
{
Assert
.
notNull
(
charset
,
"Charset must not be null"
);
return
this
.
byteBuf
.
toString
(
index
,
length
,
charset
);
}
@Override
public
boolean
isAllocated
()
{
return
this
.
byteBuf
.
refCnt
()
>
0
;
...
...
spring-core/src/test/java/org/springframework/core/io/buffer/DataBufferTests.java
浏览文件 @
090bfa63
...
...
@@ -235,6 +235,44 @@ public class DataBufferTests extends AbstractDataBufferAllocatingTestCase {
release
(
buffer
);
}
@Test
public
void
toStringNullCharset
()
{
DataBuffer
buffer
=
createDataBuffer
(
1
);
try
{
assertThatIllegalArgumentException
().
isThrownBy
(()
->
buffer
.
toString
(
null
));
}
finally
{
release
(
buffer
);
}
}
@Test
public
void
toStringUtf8
()
{
String
spring
=
"Spring"
;
byte
[]
bytes
=
spring
.
getBytes
(
StandardCharsets
.
UTF_8
);
DataBuffer
buffer
=
createDataBuffer
(
bytes
.
length
);
buffer
.
write
(
bytes
);
String
result
=
buffer
.
toString
(
StandardCharsets
.
UTF_8
);
assertThat
(
result
).
isEqualTo
(
spring
);
release
(
buffer
);
}
@Test
public
void
toStringSection
()
{
String
spring
=
"Spring"
;
byte
[]
bytes
=
spring
.
getBytes
(
StandardCharsets
.
UTF_8
);
DataBuffer
buffer
=
createDataBuffer
(
bytes
.
length
);
buffer
.
write
(
bytes
);
String
result
=
buffer
.
toString
(
1
,
3
,
StandardCharsets
.
UTF_8
);
assertThat
(
result
).
isEqualTo
(
"pri"
);
release
(
buffer
);
}
@Test
public
void
inputStream
()
throws
IOException
{
DataBuffer
buffer
=
createDataBuffer
(
4
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录