![](/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.