Here you can find the source of copyFromBufferToBuffer(ByteBuffer out, ByteBuffer in, int sourceOffset, int length)
Parameter | Description |
---|---|
out | destination buffer |
in | source buffer |
sourceOffset | offset in the source buffer |
length | how many bytes to copy |
public static void copyFromBufferToBuffer(ByteBuffer out, ByteBuffer in, int sourceOffset, int length)
//package com.java2s; /*/*from w w w .j a v a 2s .co m*/ * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with this * work for additional information regarding copyright ownership. The ASF * licenses this file to you 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.nio.ByteBuffer; public class Main { /** * Copy from one buffer to another from given offset. * <p> * Note : This will advance the position marker of {@code out} but not change the position maker * for {@code in} * @param out destination buffer * @param in source buffer * @param sourceOffset offset in the source buffer * @param length how many bytes to copy */ public static void copyFromBufferToBuffer(ByteBuffer out, ByteBuffer in, int sourceOffset, int length) { if (in.hasArray() && out.hasArray()) { System.arraycopy(in.array(), sourceOffset + in.arrayOffset(), out.array(), out.position() + out.arrayOffset(), length); skip(out, length); } else { for (int i = 0; i < length; ++i) { out.put(in.get(sourceOffset + i)); } } } /** * Copy from one buffer to another from given offset. This will be absolute positional copying and * won't affect the position of any of the buffers. * @param out * @param in * @param sourceOffset * @param destinationOffset * @param length */ public static void copyFromBufferToBuffer(ByteBuffer out, ByteBuffer in, int sourceOffset, int destinationOffset, int length) { if (in.hasArray() && out.hasArray()) { System.arraycopy(in.array(), sourceOffset + in.arrayOffset(), out.array(), out.arrayOffset() + destinationOffset, length); } else { for (int i = 0; i < length; ++i) { out.put((destinationOffset + i), in.get(sourceOffset + i)); } } } /** * Increment position in buffer. * @param buffer In this buffer. * @param length By that many bytes. */ public static void skip(ByteBuffer buffer, int length) { buffer.position(buffer.position() + length); } }