簡體   English   中英

清除 ByteBuffer

[英]Clearing a ByteBuffer

非常簡單的問題:我正在從一個 SocketChannel 讀取數據並想將結果寫入另一個 SocketChannel。 我正在使用 Selector 對象,所以我等到一個 SocketChannel 可讀,將數據轉儲到 ByteBuffer,然后當下一個 SocketChannel 可寫時,我將 ByteBuffer 轉儲到那里。 到此為止。 但是,似乎沒有任何方法可以實際“清除”ByteBuffer,因此我無法進行任何檢查以了解新數據何時到達。

我試過 .clear() 方法,但這顯然沒有清除緩沖區,只是將緩沖區位置重置為 1。

下面是一些示例代碼:

ByteBuffer channel1buf = ByteBuffer.allocate(1024);
ByteBuffer channel2buf = ByteBuffer.allocate(1024);

if (key.isReadable()) {
    if (key.channel().equals(channel1)) {
        channel1.read(channel2buf);
    } else if (key.channel().equals(channel2)) {
        channel2.read(channel1buf);
    }
} else if (key.isWritable()) {
    if (key.channel().equals(channel1) && channel1buf.asCharBuffer().length() > 0) {
        channel1.write(channel1buf);
        /* some way to clear channel1buf */
    } else /* same idea for channel2... */
}

我通過這段代碼解決了同樣的問題,希望它可以幫助你。

channel1buf.clear();
//zerolize buff manually
channel1buf.put(new byte[1024]);
channel1buf.clear();

Buffer.clear重置位置,是的,然后您可以使用getPosition() > 0來檢查之后是否向緩沖區添加了任何內容,不是...?

IMO,分配new memory(channel1buf.put(new byte[1024]);)

不是一個更好的解決方案。

您可以使用以下代碼段:

java.util.Arrays.fill(channel1buff.array(), (byte)0);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM