限制Java NIO通道(文件或socket)中的可用内容
我是NIO的新手,希望用它实现一些特性,而不是典型的流(它可以做各种事情)
我不确定我能得到的是将文件读入缓冲区并限制我将传输的内容。假设从位置100到200(即使文件长度为1000)。在网络socket上也可以这样做
我知道NIO保留了一些基本的东西来利用操作系统的功能,这就是为什么我不确定它是否可以做到的原因
我在想,一个棘手的方法是使用“LimitedReadChannel”,当它返回的值小于可用的缓冲区大小时,它使用另一个字节缓冲区,然后传输到原始字节缓冲区(1)。但似乎比必要的更棘手。我也不想使用任何与流相关的东西,因为这会破坏使用NIO的目的
(1)到目前为止
LimitedChannel.read(buffer) {
if (buffer.available?? > contentLeft) {
delegateChannel.read(smallerBuffer);
// transfer from smallerBuffer to buffer
} else {
delegateChannel.read(buffer);
}
}
# 1 楼答案
我发现缓冲区允许要求当前限制或设置新限制。因此,包装器通道(限制有效读取字节数的通道)可以修改缓冲区限制以避免读取更多
比如:
无论如何,我不确定这是否已经存在。很难找到关于这个用例的文档