1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.netty.buffer;
18
19 import static io.netty.util.internal.ObjectUtil.checkPositiveOrZero;
20
21 import io.netty.util.ByteProcessor;
22 import io.netty.util.internal.EmptyArrays;
23 import io.netty.util.internal.ObjectUtil;
24 import io.netty.util.internal.PlatformDependent;
25 import io.netty.util.internal.StringUtil;
26
27 import java.io.InputStream;
28 import java.io.OutputStream;
29 import java.nio.ByteBuffer;
30 import java.nio.ByteOrder;
31 import java.nio.ReadOnlyBufferException;
32 import java.nio.channels.FileChannel;
33 import java.nio.channels.GatheringByteChannel;
34 import java.nio.channels.ScatteringByteChannel;
35 import java.nio.charset.Charset;
36
37
38
39
40 public final class EmptyByteBuf extends ByteBuf {
41
42 static final int EMPTY_BYTE_BUF_HASH_CODE = 1;
43 private static final ByteBuffer EMPTY_BYTE_BUFFER = ByteBuffer.allocateDirect(0);
44 private static final long EMPTY_BYTE_BUFFER_ADDRESS;
45
46 static {
47 long emptyByteBufferAddress = 0;
48 try {
49 if (PlatformDependent.hasUnsafe()) {
50 emptyByteBufferAddress = PlatformDependent.directBufferAddress(EMPTY_BYTE_BUFFER);
51 }
52 } catch (Throwable t) {
53
54 }
55 EMPTY_BYTE_BUFFER_ADDRESS = emptyByteBufferAddress;
56 }
57
58 private final ByteBufAllocator alloc;
59 private final ByteOrder order;
60 private final String str;
61 private EmptyByteBuf swapped;
62
63 public EmptyByteBuf(ByteBufAllocator alloc) {
64 this(alloc, ByteOrder.BIG_ENDIAN);
65 }
66
67 private EmptyByteBuf(ByteBufAllocator alloc, ByteOrder order) {
68 this.alloc = ObjectUtil.checkNotNull(alloc, "alloc");
69 this.order = order;
70 str = StringUtil.simpleClassName(this) + (order == ByteOrder.BIG_ENDIAN? "BE" : "LE");
71 }
72
73 @Override
74 public int capacity() {
75 return 0;
76 }
77
78 @Override
79 public ByteBuf capacity(int newCapacity) {
80 throw new ReadOnlyBufferException();
81 }
82
83 @Override
84 public ByteBufAllocator alloc() {
85 return alloc;
86 }
87
88 @Override
89 public ByteOrder order() {
90 return order;
91 }
92
93 @Override
94 public ByteBuf unwrap() {
95 return null;
96 }
97
98 @Override
99 public ByteBuf asReadOnly() {
100 return Unpooled.unmodifiableBuffer(this);
101 }
102
103 @Override
104 public boolean isReadOnly() {
105 return false;
106 }
107
108 @Override
109 public boolean isDirect() {
110 return true;
111 }
112
113 @Override
114 public int maxCapacity() {
115 return 0;
116 }
117
118 @Override
119 public ByteBuf order(ByteOrder endianness) {
120 if (ObjectUtil.checkNotNull(endianness, "endianness") == order()) {
121 return this;
122 }
123
124 EmptyByteBuf swapped = this.swapped;
125 if (swapped != null) {
126 return swapped;
127 }
128
129 this.swapped = swapped = new EmptyByteBuf(alloc(), endianness);
130 return swapped;
131 }
132
133 @Override
134 public int readerIndex() {
135 return 0;
136 }
137
138 @Override
139 public ByteBuf readerIndex(int readerIndex) {
140 return checkIndex(readerIndex);
141 }
142
143 @Override
144 public int writerIndex() {
145 return 0;
146 }
147
148 @Override
149 public ByteBuf writerIndex(int writerIndex) {
150 return checkIndex(writerIndex);
151 }
152
153 @Override
154 public ByteBuf setIndex(int readerIndex, int writerIndex) {
155 checkIndex(readerIndex);
156 checkIndex(writerIndex);
157 return this;
158 }
159
160 @Override
161 public int readableBytes() {
162 return 0;
163 }
164
165 @Override
166 public int writableBytes() {
167 return 0;
168 }
169
170 @Override
171 public int maxWritableBytes() {
172 return 0;
173 }
174
175 @Override
176 public boolean isReadable() {
177 return false;
178 }
179
180 @Override
181 public boolean isWritable() {
182 return false;
183 }
184
185 @Override
186 public ByteBuf clear() {
187 return this;
188 }
189
190 @Override
191 public ByteBuf markReaderIndex() {
192 return this;
193 }
194
195 @Override
196 public ByteBuf resetReaderIndex() {
197 return this;
198 }
199
200 @Override
201 public ByteBuf markWriterIndex() {
202 return this;
203 }
204
205 @Override
206 public ByteBuf resetWriterIndex() {
207 return this;
208 }
209
210 @Override
211 public ByteBuf discardReadBytes() {
212 return this;
213 }
214
215 @Override
216 public ByteBuf discardSomeReadBytes() {
217 return this;
218 }
219
220 @Override
221 public ByteBuf ensureWritable(int minWritableBytes) {
222 checkPositiveOrZero(minWritableBytes, "minWritableBytes");
223 if (minWritableBytes != 0) {
224 throw new IndexOutOfBoundsException();
225 }
226 return this;
227 }
228
229 @Override
230 public int ensureWritable(int minWritableBytes, boolean force) {
231 checkPositiveOrZero(minWritableBytes, "minWritableBytes");
232
233 if (minWritableBytes == 0) {
234 return 0;
235 }
236
237 return 1;
238 }
239
240 @Override
241 public boolean getBoolean(int index) {
242 throw new IndexOutOfBoundsException();
243 }
244
245 @Override
246 public byte getByte(int index) {
247 throw new IndexOutOfBoundsException();
248 }
249
250 @Override
251 public short getUnsignedByte(int index) {
252 throw new IndexOutOfBoundsException();
253 }
254
255 @Override
256 public short getShort(int index) {
257 throw new IndexOutOfBoundsException();
258 }
259
260 @Override
261 public short getShortLE(int index) {
262 throw new IndexOutOfBoundsException();
263 }
264
265 @Override
266 public int getUnsignedShort(int index) {
267 throw new IndexOutOfBoundsException();
268 }
269
270 @Override
271 public int getUnsignedShortLE(int index) {
272 throw new IndexOutOfBoundsException();
273 }
274
275 @Override
276 public int getMedium(int index) {
277 throw new IndexOutOfBoundsException();
278 }
279
280 @Override
281 public int getMediumLE(int index) {
282 throw new IndexOutOfBoundsException();
283 }
284
285 @Override
286 public int getUnsignedMedium(int index) {
287 throw new IndexOutOfBoundsException();
288 }
289
290 @Override
291 public int getUnsignedMediumLE(int index) {
292 throw new IndexOutOfBoundsException();
293 }
294
295 @Override
296 public int getInt(int index) {
297 throw new IndexOutOfBoundsException();
298 }
299
300 @Override
301 public int getIntLE(int index) {
302 throw new IndexOutOfBoundsException();
303 }
304
305 @Override
306 public long getUnsignedInt(int index) {
307 throw new IndexOutOfBoundsException();
308 }
309
310 @Override
311 public long getUnsignedIntLE(int index) {
312 throw new IndexOutOfBoundsException();
313 }
314
315 @Override
316 public long getLong(int index) {
317 throw new IndexOutOfBoundsException();
318 }
319
320 @Override
321 public long getLongLE(int index) {
322 throw new IndexOutOfBoundsException();
323 }
324
325 @Override
326 public char getChar(int index) {
327 throw new IndexOutOfBoundsException();
328 }
329
330 @Override
331 public float getFloat(int index) {
332 throw new IndexOutOfBoundsException();
333 }
334
335 @Override
336 public double getDouble(int index) {
337 throw new IndexOutOfBoundsException();
338 }
339
340 @Override
341 public ByteBuf getBytes(int index, ByteBuf dst) {
342 return checkIndex(index, dst.writableBytes());
343 }
344
345 @Override
346 public ByteBuf getBytes(int index, ByteBuf dst, int length) {
347 return checkIndex(index, length);
348 }
349
350 @Override
351 public ByteBuf getBytes(int index, ByteBuf dst, int dstIndex, int length) {
352 return checkIndex(index, length);
353 }
354
355 @Override
356 public ByteBuf getBytes(int index, byte[] dst) {
357 return checkIndex(index, dst.length);
358 }
359
360 @Override
361 public ByteBuf getBytes(int index, byte[] dst, int dstIndex, int length) {
362 return checkIndex(index, length);
363 }
364
365 @Override
366 public ByteBuf getBytes(int index, ByteBuffer dst) {
367 return checkIndex(index, dst.remaining());
368 }
369
370 @Override
371 public ByteBuf getBytes(int index, OutputStream out, int length) {
372 return checkIndex(index, length);
373 }
374
375 @Override
376 public int getBytes(int index, GatheringByteChannel out, int length) {
377 checkIndex(index, length);
378 return 0;
379 }
380
381 @Override
382 public int getBytes(int index, FileChannel out, long position, int length) {
383 checkIndex(index, length);
384 return 0;
385 }
386
387 @Override
388 public CharSequence getCharSequence(int index, int length, Charset charset) {
389 checkIndex(index, length);
390 return null;
391 }
392
393 @Override
394 public ByteBuf setBoolean(int index, boolean value) {
395 throw new IndexOutOfBoundsException();
396 }
397
398 @Override
399 public ByteBuf setByte(int index, int value) {
400 throw new IndexOutOfBoundsException();
401 }
402
403 @Override
404 public ByteBuf setShort(int index, int value) {
405 throw new IndexOutOfBoundsException();
406 }
407
408 @Override
409 public ByteBuf setShortLE(int index, int value) {
410 throw new IndexOutOfBoundsException();
411 }
412
413 @Override
414 public ByteBuf setMedium(int index, int value) {
415 throw new IndexOutOfBoundsException();
416 }
417
418 @Override
419 public ByteBuf setMediumLE(int index, int value) {
420 throw new IndexOutOfBoundsException();
421 }
422
423 @Override
424 public ByteBuf setInt(int index, int value) {
425 throw new IndexOutOfBoundsException();
426 }
427
428 @Override
429 public ByteBuf setIntLE(int index, int value) {
430 throw new IndexOutOfBoundsException();
431 }
432
433 @Override
434 public ByteBuf setLong(int index, long value) {
435 throw new IndexOutOfBoundsException();
436 }
437
438 @Override
439 public ByteBuf setLongLE(int index, long value) {
440 throw new IndexOutOfBoundsException();
441 }
442
443 @Override
444 public ByteBuf setChar(int index, int value) {
445 throw new IndexOutOfBoundsException();
446 }
447
448 @Override
449 public ByteBuf setFloat(int index, float value) {
450 throw new IndexOutOfBoundsException();
451 }
452
453 @Override
454 public ByteBuf setDouble(int index, double value) {
455 throw new IndexOutOfBoundsException();
456 }
457
458 @Override
459 public ByteBuf setBytes(int index, ByteBuf src) {
460 throw new IndexOutOfBoundsException();
461 }
462
463 @Override
464 public ByteBuf setBytes(int index, ByteBuf src, int length) {
465 return checkIndex(index, length);
466 }
467
468 @Override
469 public ByteBuf setBytes(int index, ByteBuf src, int srcIndex, int length) {
470 return checkIndex(index, length);
471 }
472
473 @Override
474 public ByteBuf setBytes(int index, byte[] src) {
475 return checkIndex(index, src.length);
476 }
477
478 @Override
479 public ByteBuf setBytes(int index, byte[] src, int srcIndex, int length) {
480 return checkIndex(index, length);
481 }
482
483 @Override
484 public ByteBuf setBytes(int index, ByteBuffer src) {
485 return checkIndex(index, src.remaining());
486 }
487
488 @Override
489 public int setBytes(int index, InputStream in, int length) {
490 checkIndex(index, length);
491 return 0;
492 }
493
494 @Override
495 public int setBytes(int index, ScatteringByteChannel in, int length) {
496 checkIndex(index, length);
497 return 0;
498 }
499
500 @Override
501 public int setBytes(int index, FileChannel in, long position, int length) {
502 checkIndex(index, length);
503 return 0;
504 }
505
506 @Override
507 public ByteBuf setZero(int index, int length) {
508 return checkIndex(index, length);
509 }
510
511 @Override
512 public int setCharSequence(int index, CharSequence sequence, Charset charset) {
513 throw new IndexOutOfBoundsException();
514 }
515
516 @Override
517 public boolean readBoolean() {
518 throw new IndexOutOfBoundsException();
519 }
520
521 @Override
522 public byte readByte() {
523 throw new IndexOutOfBoundsException();
524 }
525
526 @Override
527 public short readUnsignedByte() {
528 throw new IndexOutOfBoundsException();
529 }
530
531 @Override
532 public short readShort() {
533 throw new IndexOutOfBoundsException();
534 }
535
536 @Override
537 public short readShortLE() {
538 throw new IndexOutOfBoundsException();
539 }
540
541 @Override
542 public int readUnsignedShort() {
543 throw new IndexOutOfBoundsException();
544 }
545
546 @Override
547 public int readUnsignedShortLE() {
548 throw new IndexOutOfBoundsException();
549 }
550
551 @Override
552 public int readMedium() {
553 throw new IndexOutOfBoundsException();
554 }
555
556 @Override
557 public int readMediumLE() {
558 throw new IndexOutOfBoundsException();
559 }
560
561 @Override
562 public int readUnsignedMedium() {
563 throw new IndexOutOfBoundsException();
564 }
565
566 @Override
567 public int readUnsignedMediumLE() {
568 throw new IndexOutOfBoundsException();
569 }
570
571 @Override
572 public int readInt() {
573 throw new IndexOutOfBoundsException();
574 }
575
576 @Override
577 public int readIntLE() {
578 throw new IndexOutOfBoundsException();
579 }
580
581 @Override
582 public long readUnsignedInt() {
583 throw new IndexOutOfBoundsException();
584 }
585
586 @Override
587 public long readUnsignedIntLE() {
588 throw new IndexOutOfBoundsException();
589 }
590
591 @Override
592 public long readLong() {
593 throw new IndexOutOfBoundsException();
594 }
595
596 @Override
597 public long readLongLE() {
598 throw new IndexOutOfBoundsException();
599 }
600
601 @Override
602 public char readChar() {
603 throw new IndexOutOfBoundsException();
604 }
605
606 @Override
607 public float readFloat() {
608 throw new IndexOutOfBoundsException();
609 }
610
611 @Override
612 public double readDouble() {
613 throw new IndexOutOfBoundsException();
614 }
615
616 @Override
617 public ByteBuf readBytes(int length) {
618 return checkLength(length);
619 }
620
621 @Override
622 public ByteBuf readSlice(int length) {
623 return checkLength(length);
624 }
625
626 @Override
627 public ByteBuf readRetainedSlice(int length) {
628 return checkLength(length);
629 }
630
631 @Override
632 public ByteBuf readBytes(ByteBuf dst) {
633 return checkLength(dst.writableBytes());
634 }
635
636 @Override
637 public ByteBuf readBytes(ByteBuf dst, int length) {
638 return checkLength(length);
639 }
640
641 @Override
642 public ByteBuf readBytes(ByteBuf dst, int dstIndex, int length) {
643 return checkLength(length);
644 }
645
646 @Override
647 public ByteBuf readBytes(byte[] dst) {
648 return checkLength(dst.length);
649 }
650
651 @Override
652 public ByteBuf readBytes(byte[] dst, int dstIndex, int length) {
653 return checkLength(length);
654 }
655
656 @Override
657 public ByteBuf readBytes(ByteBuffer dst) {
658 return checkLength(dst.remaining());
659 }
660
661 @Override
662 public ByteBuf readBytes(OutputStream out, int length) {
663 return checkLength(length);
664 }
665
666 @Override
667 public int readBytes(GatheringByteChannel out, int length) {
668 checkLength(length);
669 return 0;
670 }
671
672 @Override
673 public int readBytes(FileChannel out, long position, int length) {
674 checkLength(length);
675 return 0;
676 }
677
678 @Override
679 public CharSequence readCharSequence(int length, Charset charset) {
680 checkLength(length);
681 return StringUtil.EMPTY_STRING;
682 }
683
684 @Override
685 public ByteBuf skipBytes(int length) {
686 return checkLength(length);
687 }
688
689 @Override
690 public ByteBuf writeBoolean(boolean value) {
691 throw new IndexOutOfBoundsException();
692 }
693
694 @Override
695 public ByteBuf writeByte(int value) {
696 throw new IndexOutOfBoundsException();
697 }
698
699 @Override
700 public ByteBuf writeShort(int value) {
701 throw new IndexOutOfBoundsException();
702 }
703
704 @Override
705 public ByteBuf writeShortLE(int value) {
706 throw new IndexOutOfBoundsException();
707 }
708
709 @Override
710 public ByteBuf writeMedium(int value) {
711 throw new IndexOutOfBoundsException();
712 }
713
714 @Override
715 public ByteBuf writeMediumLE(int value) {
716 throw new IndexOutOfBoundsException();
717 }
718
719 @Override
720 public ByteBuf writeInt(int value) {
721 throw new IndexOutOfBoundsException();
722 }
723
724 @Override
725 public ByteBuf writeIntLE(int value) {
726 throw new IndexOutOfBoundsException();
727 }
728
729 @Override
730 public ByteBuf writeLong(long value) {
731 throw new IndexOutOfBoundsException();
732 }
733
734 @Override
735 public ByteBuf writeLongLE(long value) {
736 throw new IndexOutOfBoundsException();
737 }
738
739 @Override
740 public ByteBuf writeChar(int value) {
741 throw new IndexOutOfBoundsException();
742 }
743
744 @Override
745 public ByteBuf writeFloat(float value) {
746 throw new IndexOutOfBoundsException();
747 }
748
749 @Override
750 public ByteBuf writeDouble(double value) {
751 throw new IndexOutOfBoundsException();
752 }
753
754 @Override
755 public ByteBuf writeBytes(ByteBuf src) {
756 return checkLength(src.readableBytes());
757 }
758
759 @Override
760 public ByteBuf writeBytes(ByteBuf src, int length) {
761 return checkLength(length);
762 }
763
764 @Override
765 public ByteBuf writeBytes(ByteBuf src, int srcIndex, int length) {
766 return checkLength(length);
767 }
768
769 @Override
770 public ByteBuf writeBytes(byte[] src) {
771 return checkLength(src.length);
772 }
773
774 @Override
775 public ByteBuf writeBytes(byte[] src, int srcIndex, int length) {
776 return checkLength(length);
777 }
778
779 @Override
780 public ByteBuf writeBytes(ByteBuffer src) {
781 return checkLength(src.remaining());
782 }
783
784 @Override
785 public int writeBytes(InputStream in, int length) {
786 checkLength(length);
787 return 0;
788 }
789
790 @Override
791 public int writeBytes(ScatteringByteChannel in, int length) {
792 checkLength(length);
793 return 0;
794 }
795
796 @Override
797 public int writeBytes(FileChannel in, long position, int length) {
798 checkLength(length);
799 return 0;
800 }
801
802 @Override
803 public ByteBuf writeZero(int length) {
804 return checkLength(length);
805 }
806
807 @Override
808 public int writeCharSequence(CharSequence sequence, Charset charset) {
809 throw new IndexOutOfBoundsException();
810 }
811
812 @Override
813 public int indexOf(int fromIndex, int toIndex, byte value) {
814 checkIndex(fromIndex);
815 checkIndex(toIndex);
816 return -1;
817 }
818
819 @Override
820 public int bytesBefore(byte value) {
821 return -1;
822 }
823
824 @Override
825 public int bytesBefore(int length, byte value) {
826 checkLength(length);
827 return -1;
828 }
829
830 @Override
831 public int bytesBefore(int index, int length, byte value) {
832 checkIndex(index, length);
833 return -1;
834 }
835
836 @Override
837 public int forEachByte(ByteProcessor processor) {
838 return -1;
839 }
840
841 @Override
842 public int forEachByte(int index, int length, ByteProcessor processor) {
843 checkIndex(index, length);
844 return -1;
845 }
846
847 @Override
848 public int forEachByteDesc(ByteProcessor processor) {
849 return -1;
850 }
851
852 @Override
853 public int forEachByteDesc(int index, int length, ByteProcessor processor) {
854 checkIndex(index, length);
855 return -1;
856 }
857
858 @Override
859 public ByteBuf copy() {
860 return this;
861 }
862
863 @Override
864 public ByteBuf copy(int index, int length) {
865 return checkIndex(index, length);
866 }
867
868 @Override
869 public ByteBuf slice() {
870 return this;
871 }
872
873 @Override
874 public ByteBuf retainedSlice() {
875 return this;
876 }
877
878 @Override
879 public ByteBuf slice(int index, int length) {
880 return checkIndex(index, length);
881 }
882
883 @Override
884 public ByteBuf retainedSlice(int index, int length) {
885 return checkIndex(index, length);
886 }
887
888 @Override
889 public ByteBuf duplicate() {
890 return this;
891 }
892
893 @Override
894 public ByteBuf retainedDuplicate() {
895 return this;
896 }
897
898 @Override
899 public int nioBufferCount() {
900 return 1;
901 }
902
903 @Override
904 public ByteBuffer nioBuffer() {
905 return EMPTY_BYTE_BUFFER;
906 }
907
908 @Override
909 public ByteBuffer nioBuffer(int index, int length) {
910 checkIndex(index, length);
911 return nioBuffer();
912 }
913
914 @Override
915 public ByteBuffer[] nioBuffers() {
916 return new ByteBuffer[] { EMPTY_BYTE_BUFFER };
917 }
918
919 @Override
920 public ByteBuffer[] nioBuffers(int index, int length) {
921 checkIndex(index, length);
922 return nioBuffers();
923 }
924
925 @Override
926 public ByteBuffer internalNioBuffer(int index, int length) {
927 return EMPTY_BYTE_BUFFER;
928 }
929
930 @Override
931 public boolean hasArray() {
932 return true;
933 }
934
935 @Override
936 public byte[] array() {
937 return EmptyArrays.EMPTY_BYTES;
938 }
939
940 @Override
941 public int arrayOffset() {
942 return 0;
943 }
944
945 @Override
946 public boolean hasMemoryAddress() {
947 return EMPTY_BYTE_BUFFER_ADDRESS != 0;
948 }
949
950 @Override
951 public long memoryAddress() {
952 if (hasMemoryAddress()) {
953 return EMPTY_BYTE_BUFFER_ADDRESS;
954 } else {
955 throw new UnsupportedOperationException();
956 }
957 }
958
959 @Override
960 public boolean isContiguous() {
961 return true;
962 }
963
964 @Override
965 public String toString(Charset charset) {
966 return "";
967 }
968
969 @Override
970 public String toString(int index, int length, Charset charset) {
971 checkIndex(index, length);
972 return toString(charset);
973 }
974
975 @Override
976 public int hashCode() {
977 return EMPTY_BYTE_BUF_HASH_CODE;
978 }
979
980 @Override
981 public boolean equals(Object obj) {
982 return obj instanceof ByteBuf && !((ByteBuf) obj).isReadable();
983 }
984
985 @Override
986 public int compareTo(ByteBuf buffer) {
987 return buffer.isReadable()? -1 : 0;
988 }
989
990 @Override
991 public String toString() {
992 return str;
993 }
994
995 @Override
996 public boolean isReadable(int size) {
997 return false;
998 }
999
1000 @Override
1001 public boolean isWritable(int size) {
1002 return false;
1003 }
1004
1005 @Override
1006 public int refCnt() {
1007 return 1;
1008 }
1009
1010 @Override
1011 public ByteBuf retain() {
1012 return this;
1013 }
1014
1015 @Override
1016 public ByteBuf retain(int increment) {
1017 return this;
1018 }
1019
1020 @Override
1021 public ByteBuf touch() {
1022 return this;
1023 }
1024
1025 @Override
1026 public ByteBuf touch(Object hint) {
1027 return this;
1028 }
1029
1030 @Override
1031 public boolean release() {
1032 return false;
1033 }
1034
1035 @Override
1036 public boolean release(int decrement) {
1037 return false;
1038 }
1039
1040 private ByteBuf checkIndex(int index) {
1041 if (index != 0) {
1042 throw new IndexOutOfBoundsException();
1043 }
1044 return this;
1045 }
1046
1047 private ByteBuf checkIndex(int index, int length) {
1048 checkPositiveOrZero(length, "length");
1049 if (index != 0 || length != 0) {
1050 throw new IndexOutOfBoundsException();
1051 }
1052 return this;
1053 }
1054
1055 private ByteBuf checkLength(int length) {
1056 checkPositiveOrZero(length, "length");
1057 if (length != 0) {
1058 throw new IndexOutOfBoundsException();
1059 }
1060 return this;
1061 }
1062 }