001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017:
018: package java.nio;
019:
020: /**
021: * HeapByteBuffer, ReadWriteHeapByteBuffer and ReadOnlyHeapByteBuffer compose
022: * the implementation of array based byte buffers.
023: * <p>
024: * ReadOnlyHeapByteBuffer extends HeapByteBuffer with all the write methods
025: * throwing read only exception.
026: * </p>
027: * <p>
028: * This class is marked final for runtime performance.
029: * </p>
030: *
031: */
032: final class ReadOnlyHeapByteBuffer extends HeapByteBuffer {
033:
034: static ReadOnlyHeapByteBuffer copy(HeapByteBuffer other,
035: int markOfOther) {
036: ReadOnlyHeapByteBuffer buf = new ReadOnlyHeapByteBuffer(
037: other.backingArray, other.capacity(), other.offset);
038: buf.limit = other.limit();
039: buf.position = other.position();
040: buf.mark = markOfOther;
041: buf.order(other.order());
042: return buf;
043: }
044:
045: ReadOnlyHeapByteBuffer(byte[] backingArray, int capacity,
046: int arrayOffset) {
047: super (backingArray, capacity, arrayOffset);
048: }
049:
050: @Override
051: public ByteBuffer asReadOnlyBuffer() {
052: return copy(this , mark);
053: }
054:
055: @Override
056: public ByteBuffer compact() {
057: throw new ReadOnlyBufferException();
058: }
059:
060: @Override
061: public ByteBuffer duplicate() {
062: return copy(this , mark);
063: }
064:
065: @Override
066: public boolean isReadOnly() {
067: return true;
068: }
069:
070: @Override
071: protected byte[] protectedArray() {
072: throw new ReadOnlyBufferException();
073: }
074:
075: @Override
076: protected int protectedArrayOffset() {
077: throw new ReadOnlyBufferException();
078: }
079:
080: @Override
081: protected boolean protectedHasArray() {
082: return false;
083: }
084:
085: @Override
086: public ByteBuffer put(byte b) {
087: throw new ReadOnlyBufferException();
088: }
089:
090: @Override
091: public ByteBuffer put(int index, byte b) {
092: throw new ReadOnlyBufferException();
093: }
094:
095: @Override
096: public ByteBuffer put(byte[] src, int off, int len) {
097: throw new ReadOnlyBufferException();
098: }
099:
100: @Override
101: public ByteBuffer putDouble(double value) {
102: throw new ReadOnlyBufferException();
103: }
104:
105: @Override
106: public ByteBuffer putDouble(int index, double value) {
107: throw new ReadOnlyBufferException();
108: }
109:
110: @Override
111: public ByteBuffer putFloat(float value) {
112: throw new ReadOnlyBufferException();
113: }
114:
115: @Override
116: public ByteBuffer putFloat(int index, float value) {
117: throw new ReadOnlyBufferException();
118: }
119:
120: @Override
121: public ByteBuffer putInt(int value) {
122: throw new ReadOnlyBufferException();
123: }
124:
125: @Override
126: public ByteBuffer putInt(int index, int value) {
127: throw new ReadOnlyBufferException();
128: }
129:
130: @Override
131: public ByteBuffer putLong(int index, long value) {
132: throw new ReadOnlyBufferException();
133: }
134:
135: @Override
136: public ByteBuffer putLong(long value) {
137: throw new ReadOnlyBufferException();
138: }
139:
140: @Override
141: public ByteBuffer putShort(int index, short value) {
142: throw new ReadOnlyBufferException();
143: }
144:
145: @Override
146: public ByteBuffer putShort(short value) {
147: throw new ReadOnlyBufferException();
148: }
149:
150: @Override
151: public ByteBuffer put(ByteBuffer buf) {
152: throw new ReadOnlyBufferException();
153: }
154:
155: @Override
156: public ByteBuffer slice() {
157: ReadOnlyHeapByteBuffer slice = new ReadOnlyHeapByteBuffer(
158: backingArray, remaining(), offset + position);
159: slice.order = order;
160: return slice;
161: }
162: }
|