/* * 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. */ package org.apache.geode.internal.tcp; import java.nio.ByteBuffer; import org.apache.geode.internal.offheap.StoredObject; /** * You should only create an instance of this class if the bytes this buffer reads will never * change. If you want a buffer than can be refilled with other bytes then create an instance of * ByteBufferInputStream instead. Note that even though this class is immutable the position on its * ByteBuffer can change. * * @since GemFire 6.6 */ public class ImmutableByteBufferInputStream extends ByteBufferInputStream { /** * Create an immutable input stream by whose contents are the first length bytes from the given * input stream. * * @param existing the input stream whose content will go into this stream. Note that this * existing stream will be read by this class (a copy is not made) so it should not be * changed externally. * @param length the number of bytes to put in this stream */ public ImmutableByteBufferInputStream(ByteBufferInputStream existing, int length) { setBuffer(existing.slice(length)); } /** * Create an immutable input stream whose contents are the given bytes * * @param bytes the content of this stream. Note that this byte array will be read by this class * (a copy is not made) so it should not be changed externally. */ public ImmutableByteBufferInputStream(byte[] bytes) { setBuffer(ByteBuffer.wrap(bytes)); } /** * Create an immutable input stream whose contents are the given bytes * * @param bb the content of this stream. Note that bb will be read by this class (a copy is not * made) so it should not be changed externally. */ public ImmutableByteBufferInputStream(ByteBuffer bb) { setBuffer(bb.slice()); } /** * Create an immutable input stream by copying another. A somewhat shallow copy is made. * * @param copy the input stream to copy. Note that this copy stream will be read by this class (a * copy is not made) so it should not be changed externally. */ public ImmutableByteBufferInputStream(ImmutableByteBufferInputStream copy) { super(copy); } public ImmutableByteBufferInputStream() { // for serialization } public ImmutableByteBufferInputStream(StoredObject blob) { super(blob); } @Override public boolean markSupported() { return false; } @Override public void mark(int limit) { // unsupported but exception thrown by reset } @Override public void reset() { throw new UnsupportedOperationException(); } }