All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jboss.netty.buffer.EmptyChannelBuffer Maven / Gradle / Ivy

Go to download

The Netty project is an effort to provide an asynchronous event-driven network application framework and tools for rapid development of maintainable high performance and high scalability protocol servers and clients. In other words, Netty is a NIO client server framework which enables quick and easy development of network applications such as protocol servers and clients. It greatly simplifies and streamlines network programming such as TCP and UDP socket server.

There is a newer version: 4.0.0.Alpha8
Show newest version
/*
 * Copyright 2013 The Netty Project
 *
 * The Netty Project 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.
 */

package org.jboss.netty.buffer;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.GatheringByteChannel;
import java.nio.channels.ScatteringByteChannel;

/**
 * An immutable empty buffer implementation. Typically used as a singleton via
 * {@link ChannelBuffers#EMPTY_BUFFER} and returned by {@link ChannelBuffers#buffer(int)} etc when
 * an empty buffer is requested.
 *
 * 

Note: For backwards compatibility, this class extends {@link BigEndianHeapChannelBuffer}. * However, it never makes any writes to the reader and writer indices, which avoids contention * when the singleton instance is used concurrently. */ public class EmptyChannelBuffer extends BigEndianHeapChannelBuffer { private static final byte[] BUFFER = {}; EmptyChannelBuffer() { super(BUFFER); } @Override public void clear() { } @Override public void readerIndex(int readerIndex) { if (readerIndex != 0) { throw new IndexOutOfBoundsException("Invalid readerIndex: " + readerIndex + " - Maximum is 0"); } } @Override public void writerIndex(int writerIndex) { if (writerIndex != 0) { throw new IndexOutOfBoundsException("Invalid writerIndex: " + writerIndex + " - Maximum is 0"); } } @Override public void setIndex(int readerIndex, int writerIndex) { if (writerIndex != 0 || readerIndex != 0) { throw new IndexOutOfBoundsException("Invalid writerIndex: " + writerIndex + " - Maximum is " + readerIndex + " or " + capacity()); } } @Override public void markReaderIndex() { } @Override public void resetReaderIndex() { } @Override public void markWriterIndex() { } @Override public void resetWriterIndex() { } @Override public void discardReadBytes() { } @Override public ChannelBuffer readBytes(int length) { checkReadableBytes(length); return this; } @Override public ChannelBuffer readSlice(int length) { checkReadableBytes(length); return this; } @Override public void readBytes(byte[] dst, int dstIndex, int length) { checkReadableBytes(length); } @Override public void readBytes(byte[] dst) { checkReadableBytes(dst.length); } @Override public void readBytes(ChannelBuffer dst) { checkReadableBytes(dst.writableBytes()); } @Override public void readBytes(ChannelBuffer dst, int length) { checkReadableBytes(length); } @Override public void readBytes(ChannelBuffer dst, int dstIndex, int length) { checkReadableBytes(length); } @Override public void readBytes(ByteBuffer dst) { checkReadableBytes(dst.remaining()); } @Override public int readBytes(GatheringByteChannel out, int length) throws IOException { checkReadableBytes(length); return 0; } @Override public void readBytes(OutputStream out, int length) throws IOException { checkReadableBytes(length); } @Override public void skipBytes(int length) { checkReadableBytes(length); } @Override public void writeBytes(byte[] src, int srcIndex, int length) { checkWritableBytes(length); } @Override public void writeBytes(ChannelBuffer src, int length) { checkWritableBytes(length); } @Override public void writeBytes(ChannelBuffer src, int srcIndex, int length) { checkWritableBytes(length); } @Override public void writeBytes(ByteBuffer src) { checkWritableBytes(src.remaining()); } @Override public int writeBytes(InputStream in, int length) throws IOException { checkWritableBytes(length); return 0; } @Override public int writeBytes(ScatteringByteChannel in, int length) throws IOException { checkWritableBytes(length); return 0; } @Override public void writeZero(int length) { checkWritableBytes(length); } /** * Throws an {@link IndexOutOfBoundsException} the length is not 0. */ private void checkWritableBytes(int length) { if (length == 0) { return; } if (length > 0) { throw new IndexOutOfBoundsException("Writable bytes exceeded - Need " + length + ", maximum is " + 0); } else { throw new IndexOutOfBoundsException("length < 0"); } } /** * Throws an {@link IndexOutOfBoundsException} the length is not 0. */ protected void checkReadableBytes(int length) { if (length == 0) { return; } if (length > 0) { throw new IndexOutOfBoundsException("Not enough readable bytes - Need " + length + ", maximum is " + readableBytes()); } else { throw new IndexOutOfBoundsException("length < 0"); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy