read ReadableByteChannel - Java java.nio

Java examples for java.nio:ByteBuffer Read

Description

read ReadableByteChannel

Demo Code

/**/*  w  w  w.j  a v a2  s  . c  o  m*/
 * 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.
 */
//package com.java2s;

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 Tutorials