Java ReadableByteChannel Read read(ReadableByteChannel channel, ByteBuffer[] dsts)

Here you can find the source of read(ReadableByteChannel channel, ByteBuffer[] dsts)

Description

read

License

Apache License

Declaration

public static long read(ReadableByteChannel channel, ByteBuffer[] dsts) throws IOException 

Method Source Code

//package com.java2s;
/**/*w  w w  . j  a  v a 2  s .com*/
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import java.io.IOException;
import java.nio.ByteBuffer;

import java.nio.channels.ReadableByteChannel;
import java.nio.channels.ScatteringByteChannel;

public class Main {
    public static long read(ReadableByteChannel channel, ByteBuffer[] dsts) throws IOException {
        if (channel instanceof ScatteringByteChannel) {
            ScatteringByteChannel sbc = (ScatteringByteChannel) channel;
            return sbc.read(dsts);
        }

        long totalBytesRead = -1;

        for (ByteBuffer buf : dsts) {
            // Skip to the next byte buffer with bytes remaining
            if (!buf.hasRemaining()) {
                continue;
            }

            int bytesRead = channel.read(buf);

            // Bail if EOF has been reached
            if (bytesRead < 0) {
                break;
            }

            if (totalBytesRead < 0) {
                totalBytesRead = bytesRead;
            } else {
                totalBytesRead += bytesRead;
            }

            // Bail if the current byte buffer couldn't be consumed
            if (buf.hasRemaining()) {
                break;
            }
        }

        return totalBytesRead;
    }
}

Related

  1. fill(ReadableByteChannel in, ByteBuffer buffer)
  2. getNextVIntAsLong(ByteBuffer buffer, ReadableByteChannel readChannel)
  3. infiniteReadableByteChannelFor(ByteBuffer... buffers)
  4. read(ReadableByteChannel channel, ByteBuffer buffer)
  5. read(ReadableByteChannel channel, ByteBuffer buffer)
  6. read(ReadableByteChannel channel, ByteBuffer[] dsts, int offset, int length)
  7. read(ReadableByteChannel channel, int amount, ByteBuffer dest)
  8. readAll(ReadableByteChannel ch, ByteBuffer dst)
  9. readAllBytesOrNone(ReadableByteChannel channel, ByteBuffer buffer, int numBytes)