![](/img/trans.png)
[英]Understanding Cause of NullPointerException in Java NIO Socket Channel
[英]Limit the content available from a Java NIO Channel (File or Socket)
我对NIO还是很陌生,想用它实现一些功能,而不是典型的Streams(它可以完成所有事情)。
我不确定我能得到的是从文件读取到缓冲区中并限制要传输的内容。 假设从位置100到200(即使文件长度为1000)。 在网络套接字上做也很好。
我知道NIO保持基本功能来利用OS功能,这就是为什么我不确定可以做到这一点的原因。
我当时在想,一种棘手的方法是“ LimitedReadChannel”,当它返回的值小于可用的缓冲区大小时,它将使用另一个字节缓冲区,然后再传输到原始的字节缓冲区(1)。 但是似乎比需要的更棘手。 我也不想使用任何与流相关的东西,因为它会破坏使用NIO的目的。
(1)到目前为止...
LimitedChannel.read(buffer) {
if (buffer.available?? > contentLeft) {
delegateChannel.read(smallerBuffer);
// transfer from smallerBuffer to buffer
} else {
delegateChannel.read(buffer);
}
}
我发现Buffer承认要求当前限制或设置新限制。 这样包装器通道(用于限制读取的有效字节数的通道)可以修改缓冲区限制,以避免读取更多内容...
就像是:
// LimitedChannel.java
// private int bytesLeft; // remaining amount of bytes to read
public int read(ByteBuffer buffer) {
if (bytesLeft <= 0) {
return -1;
}
int oldLimit = buffer.limit();
if (bytesLeft < buffer.remaining()) {
// ensure I'm not reading more than allowed
buffer.limit(buffer.position() + bytesLeft);
}
int bytesRead = delegateChannel.read(buffer);
bytesLeft -= bytesRead;
buffer.limit(oldLimit);
return bytesRead;
}
无论如何,不确定此位置是否已经存在。 很难找到有关此用例的文档...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.