Java File Read via ByteBuffer copy(final ReadableByteChannel srcChannel, final WritableByteChannel destChannel)

Here you can find the source of copy(final ReadableByteChannel srcChannel, final WritableByteChannel destChannel)

Description

Copies the content from one channel to another.

License

Apache License

Parameter

Parameter Description
srcChannel the source channel to copy from
destChannel the destination channel to copy to

Declaration

public static void copy(final ReadableByteChannel srcChannel, final WritableByteChannel destChannel)
        throws IOException 

Method Source Code

//package com.java2s;
/*/*from   ww  w. j  a  va  2  s  . c o  m*/
 * Copyright (c) 2013-2014 mgm technology partners GmbH
 *
 * 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.WritableByteChannel;

public class Main {
    private static final int BUFFER_SIZE = 64 * 1024;

    /**
     * Copies the content from one channel to another.
     *
     * @param srcChannel
     *       the source channel to copy from
     * @param destChannel
     *       the destination channel to copy to
     */
    public static void copy(final ReadableByteChannel srcChannel, final WritableByteChannel destChannel)
            throws IOException {
        final ByteBuffer buffer = ByteBuffer.allocateDirect(BUFFER_SIZE);
        while (srcChannel.read(buffer) != -1) {
            // flip the buffer so it can be written to the destination channel
            buffer.flip();

            // write to the destination channel
            destChannel.write(buffer);

            // If partial transfer, shift remainder down so it does not get lost
            // If buffer is empty, this is the same as calling clear()
            buffer.compact();
        }

        // EOF will leave buffer in fill state
        buffer.flip();

        // make sure the buffer is fully drained
        while (buffer.hasRemaining()) {
            destChannel.write(buffer);
        }
    }
}

Related

  1. channelCopy(@Nonnull @WillNotClose final ReadableByteChannel aSrc, @Nonnull @WillNotClose final WritableByteChannel aDest)
  2. channelCopy2(ReadableByteChannel src, WritableByteChannel dest)
  3. ClientReadWithBlock(SocketChannel sc)
  4. ClientReadWithWait(SocketChannel sc)
  5. copy(final ReadableByteChannel src, final WritableByteChannel dest)
  6. copyChannel(int bufferSize, ReadableByteChannel source, WritableByteChannel destination)
  7. copyStream(BufferedReader reader, BufferedWriter writer)
  8. count(final ReadableByteChannel src)
  9. getReadBuffer(File file)