@@ -22,6 +22,10 @@ public class BufImpl implements Buf {
2222 private int forwardPos ;
2323 private int reversePos ;
2424
25+ private void setForwardPos (int pos ) {
26+ this .forwardPos = pos ;
27+ }
28+
2529 public BufImpl (int bufSize ) {
2630 this .buf = new byte [bufSize ];
2731 this .forwardPos = 0 ;
@@ -34,23 +38,50 @@ public BufImpl(byte[] keyBuf) {
3438 this .reversePos = keyBuf .length - 1 ;
3539 }
3640
41+ public BufImpl (int bufSize , int dataPos ) {
42+ this .buf = new byte [bufSize ];
43+ this .forwardPos = dataPos ;
44+ this .reversePos = bufSize - 1 ;
45+ }
46+
3747 @ Override
3848 public void write (byte b ) {
3949 buf [forwardPos ++] = b ;
4050 }
4151
52+ @ Override
53+ public void write (int pos , byte b ) {
54+ buf [pos ] = b ;
55+ }
56+
4257 @ Override
4358 public void write (byte [] b ) {
4459 System .arraycopy (b , 0 , buf , forwardPos , b .length );
4560 forwardPos += b .length ;
4661 }
4762
63+ @ Override
64+ public void write (int pos , byte [] b ) {
65+ System .arraycopy (b , 0 , buf , pos , b .length );
66+ }
67+
4868 @ Override
4969 public void write (byte [] b , int pos , int length ) {
5070 System .arraycopy (b , pos , buf , forwardPos , length );
5171 forwardPos += length ;
5272 }
5373
74+ @ Override
75+ public void write (int srcPos , byte [] b , int pos , int length ) {
76+ System .arraycopy (b , pos , buf , srcPos , length );
77+ }
78+
79+ @ Override
80+ public void writeShort (int pos , short i ) {
81+ buf [pos ] = (byte ) (i >>> 8 );
82+ buf [pos + 1 ] = (byte ) i ;
83+ }
84+
5485 @ Override
5586 public void writeInt (int i ) {
5687 buf [forwardPos ++] = (byte ) (i >>> 24 );
@@ -59,6 +90,14 @@ public void writeInt(int i) {
5990 buf [forwardPos ++] = (byte ) i ;
6091 }
6192
93+ @ Override
94+ public void writeInt (int pos , int i ) {
95+ buf [pos ] = (byte ) (i >>> 24 );
96+ buf [pos + 1 ] = (byte ) (i >>> 16 );
97+ buf [pos + 2 ] = (byte ) (i >>> 8 );
98+ buf [pos + 3 ] = (byte ) i ;
99+ }
100+
62101 @ Override
63102 public void writeLong (long l ) {
64103 buf [forwardPos ++] = (byte ) (l >>> 56 );
@@ -71,6 +110,18 @@ public void writeLong(long l) {
71110 buf [forwardPos ++] = (byte ) l ;
72111 }
73112
113+ @ Override
114+ public void writeLong (int pos , long l ) {
115+ buf [pos ] = (byte ) (l >>> 56 );
116+ buf [pos + 1 ] = (byte ) (l >>> 48 );
117+ buf [pos + 2 ] = (byte ) (l >>> 40 );
118+ buf [pos + 3 ] = (byte ) (l >>> 32 );
119+ buf [pos + 4 ] = (byte ) (l >>> 24 );
120+ buf [pos + 5 ] = (byte ) (l >>> 16 );
121+ buf [pos + 6 ] = (byte ) (l >>> 8 );
122+ buf [pos + 7 ] = (byte ) l ;
123+ }
124+
74125 @ Override
75126 public byte peek () {
76127 return buf [forwardPos ];
@@ -101,6 +152,11 @@ public byte read() {
101152 return buf [forwardPos ++];
102153 }
103154
155+ @ Override
156+ public byte readAt (int pos ) {
157+ return buf [pos ];
158+ }
159+
104160 @ Override
105161 public byte [] read (int length ) {
106162 byte [] b = new byte [length ];
@@ -109,12 +165,36 @@ public byte[] read(int length) {
109165 return b ;
110166 }
111167
168+ @ Override
169+ public byte [] readAt (int pos , int length ) {
170+ byte [] b = new byte [length ];
171+ System .arraycopy (buf , pos , b , 0 , length );
172+ return b ;
173+ }
174+
112175 @ Override
113176 public void read (byte [] b , int pos , int length ) {
114177 System .arraycopy (buf , forwardPos , b , pos , length );
115178 forwardPos += length ;
116179 }
117180
181+ @ Override
182+ public void readAt (int srcPos , byte [] b , int pos , int length ) {
183+ System .arraycopy (buf , srcPos , b , pos , length );
184+ }
185+
186+ @ Override
187+ public short readShortAt (int pos ) {
188+ return (short )(((buf [pos ] & 0xFF ) << 8 )
189+ | buf [pos + 1 ] & 0xFF );
190+ }
191+
192+ @ Override
193+ public short readShort () {
194+ return (short )(((buf [forwardPos ++] & 0xFF ) << 8 )
195+ | buf [forwardPos ++] & 0xFF );
196+ }
197+
118198 @ Override
119199 public int readInt () {
120200 return (((buf [forwardPos ++] & 0xFF ) << 24 )
@@ -123,6 +203,14 @@ public int readInt() {
123203 | buf [forwardPos ++] & 0xFF );
124204 }
125205
206+ @ Override
207+ public int readIntAt (int pos ) {
208+ return (((buf [pos ++] & 0xFF ) << 24 )
209+ | ((buf [pos ++] & 0xFF ) << 16 )
210+ | ((buf [pos ++] & 0xFF ) << 8 )
211+ | buf [pos ++] & 0xFF );
212+ }
213+
126214 @ Override
127215 public long readLong () {
128216 long l = buf [forwardPos ++] & 0xFF ;
@@ -133,6 +221,16 @@ public long readLong() {
133221 return l ;
134222 }
135223
224+ @ Override
225+ public long readLongAt (int pos ) {
226+ long l = buf [pos ++] & 0xFF ;
227+ for (int i = 0 ; i < 7 ; i ++) {
228+ l <<= 8 ;
229+ l |= buf [pos ++] & 0xFF ;
230+ }
231+ return l ;
232+ }
233+
136234 @ Override
137235 public void reverseWrite (byte b ) {
138236 buf [reversePos --] = b ;
@@ -213,11 +311,26 @@ public void resize(int oldSize, int newSize) {
213311 }
214312 }
215313
314+ @ Override
315+ public void setForwardOffset (int pos ) {
316+ this .forwardPos = pos ;
317+ }
318+
216319 @ Override
217320 public boolean isEnd () {
218321 return (reversePos - forwardPos + 1 ) == 0 ;
219322 }
220323
324+ @ Override
325+ public int restReadableSize () {
326+ return this .buf .length - forwardPos - 1 ;
327+ }
328+
329+ @ Override
330+ public int readOffset () {
331+ return forwardPos ;
332+ }
333+
221334 @ Override
222335 public byte [] getBytes () {
223336 int emptySize = reversePos - forwardPos + 1 ;
0 commit comments