@@ -22,6 +22,10 @@ public class BufImpl implements Buf {
22
22
private int forwardPos ;
23
23
private int reversePos ;
24
24
25
+ private void setForwardPos (int pos ) {
26
+ this .forwardPos = pos ;
27
+ }
28
+
25
29
public BufImpl (int bufSize ) {
26
30
this .buf = new byte [bufSize ];
27
31
this .forwardPos = 0 ;
@@ -34,23 +38,50 @@ public BufImpl(byte[] keyBuf) {
34
38
this .reversePos = keyBuf .length - 1 ;
35
39
}
36
40
41
+ public BufImpl (int bufSize , int dataPos ) {
42
+ this .buf = new byte [bufSize ];
43
+ this .forwardPos = dataPos ;
44
+ this .reversePos = bufSize - 1 ;
45
+ }
46
+
37
47
@ Override
38
48
public void write (byte b ) {
39
49
buf [forwardPos ++] = b ;
40
50
}
41
51
52
+ @ Override
53
+ public void write (int pos , byte b ) {
54
+ buf [pos ] = b ;
55
+ }
56
+
42
57
@ Override
43
58
public void write (byte [] b ) {
44
59
System .arraycopy (b , 0 , buf , forwardPos , b .length );
45
60
forwardPos += b .length ;
46
61
}
47
62
63
+ @ Override
64
+ public void write (int pos , byte [] b ) {
65
+ System .arraycopy (b , 0 , buf , pos , b .length );
66
+ }
67
+
48
68
@ Override
49
69
public void write (byte [] b , int pos , int length ) {
50
70
System .arraycopy (b , pos , buf , forwardPos , length );
51
71
forwardPos += length ;
52
72
}
53
73
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
+
54
85
@ Override
55
86
public void writeInt (int i ) {
56
87
buf [forwardPos ++] = (byte ) (i >>> 24 );
@@ -59,6 +90,14 @@ public void writeInt(int i) {
59
90
buf [forwardPos ++] = (byte ) i ;
60
91
}
61
92
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
+
62
101
@ Override
63
102
public void writeLong (long l ) {
64
103
buf [forwardPos ++] = (byte ) (l >>> 56 );
@@ -71,6 +110,18 @@ public void writeLong(long l) {
71
110
buf [forwardPos ++] = (byte ) l ;
72
111
}
73
112
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
+
74
125
@ Override
75
126
public byte peek () {
76
127
return buf [forwardPos ];
@@ -101,6 +152,11 @@ public byte read() {
101
152
return buf [forwardPos ++];
102
153
}
103
154
155
+ @ Override
156
+ public byte readAt (int pos ) {
157
+ return buf [pos ];
158
+ }
159
+
104
160
@ Override
105
161
public byte [] read (int length ) {
106
162
byte [] b = new byte [length ];
@@ -109,12 +165,36 @@ public byte[] read(int length) {
109
165
return b ;
110
166
}
111
167
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
+
112
175
@ Override
113
176
public void read (byte [] b , int pos , int length ) {
114
177
System .arraycopy (buf , forwardPos , b , pos , length );
115
178
forwardPos += length ;
116
179
}
117
180
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
+
118
198
@ Override
119
199
public int readInt () {
120
200
return (((buf [forwardPos ++] & 0xFF ) << 24 )
@@ -123,6 +203,14 @@ public int readInt() {
123
203
| buf [forwardPos ++] & 0xFF );
124
204
}
125
205
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
+
126
214
@ Override
127
215
public long readLong () {
128
216
long l = buf [forwardPos ++] & 0xFF ;
@@ -133,6 +221,16 @@ public long readLong() {
133
221
return l ;
134
222
}
135
223
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
+
136
234
@ Override
137
235
public void reverseWrite (byte b ) {
138
236
buf [reversePos --] = b ;
@@ -213,11 +311,26 @@ public void resize(int oldSize, int newSize) {
213
311
}
214
312
}
215
313
314
+ @ Override
315
+ public void setForwardOffset (int pos ) {
316
+ this .forwardPos = pos ;
317
+ }
318
+
216
319
@ Override
217
320
public boolean isEnd () {
218
321
return (reversePos - forwardPos + 1 ) == 0 ;
219
322
}
220
323
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
+
221
334
@ Override
222
335
public byte [] getBytes () {
223
336
int emptySize = reversePos - forwardPos + 1 ;
0 commit comments