blob: 7f824049a259d208c883cae5df575faad81fc285 [file] [log] [blame]
/*
* Copyright (C) 2022 The Android Open Source Project
*
* 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.android.net.module.util.async;
/**
* Allows reading from a buffer of bytes. The data can be read and thus removed,
* or peeked at without disturbing the buffer state.
*
* @hide
*/
public interface ReadableByteBuffer {
/** Returns the size of the buffered data. */
int size();
/**
* Returns the maximum amount of the buffered data.
*
* The caller may use this method in combination with peekBytes()
* to estimate when the buffer needs to be emptied using readData().
*/
int capacity();
/** Clears all buffered data. */
void clear();
/** Returns a single byte at the given offset. */
byte peek(int offset);
/** Copies an array of bytes from the given offset to "dst". */
void peekBytes(int offset, byte[] dst, int dstPos, int dstLen);
/** Reads and removes an array of bytes from the head of the buffer. */
void readBytes(byte[] dst, int dstPos, int dstLen);
/** Returns the amount of contiguous readable data. */
int getDirectReadSize();
/** Returns the position of contiguous readable data. */
int getDirectReadPos();
/** Returns the buffer reference for direct read operation. */
byte[] getDirectReadBuffer();
/** Must be called after performing a direct read using getDirectReadBuffer(). */
void accountForDirectRead(int len);
}