19
19
* little endian か?
20
20
* 最下位ビットが先頭 |76543210|fedcba98|
21
21
* byte列は左詰め?、intは右詰め
22
+ *
22
23
* @deprecated テストはしていないかもしれない
23
24
*/
24
25
@ Deprecated
25
26
public class LittleBitPacket extends BaseBitPac {
26
27
27
28
class LittleBitInputStream extends BitInputStream {
28
29
30
+ /**
31
+ * ビット読み込み.
32
+ * バイト順では下位バイトが先頭
33
+ *
34
+ * @param bit 0 から 32ぐらい 32を超える場合は先頭のみ返され残りはskipされる形
35
+ * @return |xxdcba98|76543210|
36
+ */
37
+ @ Override
38
+ public int readInt (int bit ) {
39
+ if (bit > bitLength ()) {
40
+ throw new java .lang .IndexOutOfBoundsException ();
41
+ }
42
+ int ret = 0 ;
43
+ int flen = 8 - readPadding ;
44
+ if (bit >= flen ) { // そのまま
45
+ ret = (int ) ((pac .read () >> readPadding ) & andMask (flen ));
46
+ bit -= flen ;
47
+ readPadding = 0 ;
48
+ }
49
+ int len = (int ) bit / 8 ;
50
+ if (len > 0 ) {
51
+ byte [] d = new byte [len ];
52
+ pac .read (d );
53
+ for (byte x : d ) {
54
+ ret |= (x & 0xff ) << flen ;
55
+ flen += 8 ;
56
+ }
57
+ bit -= len * 8 ;
58
+ }
59
+ if (bit > 0 ) { // bit = 1~7 ビット構造で異なる
60
+ int d = ((pac .read () >> readPadding ) & andMask (bit )) << flen ;
61
+ readPadding += bit ;
62
+ ret |= d ;
63
+ if (pac .length () == 0 && readPadding + writePadding == 8 ) {
64
+ readPadding = 0 ;
65
+ writePadding = 0 ;
66
+ } else {
67
+ d &= andMask (8 - readPadding ) << bit ;
68
+ pac .backWrite (d );
69
+ }
70
+ }
71
+ return ret ;
72
+ }
73
+
29
74
@ Override
30
75
public LittleBitPacket readPac (int bit ) {
31
76
if (bit > bitLength ()) {
@@ -54,14 +99,15 @@ public LittleBitPacket readPac(int bit) {
54
99
}
55
100
if (bit > 0 ) { // bit = 1~7 ビット構造で異なる
56
101
int d = readInt (bit );
57
- bp .writeBit (d ,bit );
102
+ bp .writeBit (d , bit );
58
103
}
59
104
return bp ;
60
105
}
61
106
62
107
/**
63
108
* readのビット版 入れ物はbyte列
64
109
* 右詰め |76543210|fedcba98|
110
+ *
65
111
* @param data 戻りデータ
66
112
* @param offsetBit 開始ビット位置
67
113
* @param length ビット長
@@ -76,14 +122,14 @@ public long readBit(byte[] data, long offsetBit, long length) {
76
122
retLength = length ;
77
123
int of = (int ) (offsetBit / 8 );
78
124
int ofbit = (int ) (offsetBit % 8 );
79
-
80
- if ( ofbit > readPadding ) {
81
- // throw new UnsupportedOperationException();
82
- } else if ( ofbit == readPadding ) {
83
- byte [] sd = new byte [(int )((length + readPadding + 7 ) / 8 )];
125
+
126
+ if (ofbit > readPadding ) {
127
+ // throw new UnsupportedOperationException();
128
+ } else if (ofbit == readPadding ) {
129
+ byte [] sd = new byte [(int ) ((length + readPadding + 7 ) / 8 )];
84
130
pac .read (sd );
85
- sd [0 ] |= (byte ) (data [of ] & (0xff - andMask (8 - ofbit )));
86
- System .arraycopy (sd ,0 , data ,of , (int ) ((length + readPadding ) / 8 ));
131
+ sd [0 ] |= (byte ) (data [of ] & (0xff - andMask (8 - ofbit )));
132
+ System .arraycopy (sd , 0 , data , of , (int ) ((length + readPadding ) / 8 ));
87
133
long l = ((length + readPadding ) / 8 ) * 8 ;
88
134
length -= l - readPadding ;
89
135
offsetBit += l ;
@@ -92,12 +138,12 @@ public long readBit(byte[] data, long offsetBit, long length) {
92
138
readPadding = 0 ;
93
139
retLength += l ;
94
140
} else {
95
- // throw new UnsupportedOperationException();
141
+ // throw new UnsupportedOperationException();
96
142
}
97
143
98
144
if (ofbit > 0 && length >= (8 - ofbit )) {
99
145
data [of ] &= andMask (ofbit );
100
- data [of ] |= (byte )(readInt (8 - ofbit ) << ofbit );
146
+ data [of ] |= (byte ) (readInt (8 - ofbit ) << ofbit );
101
147
of ++;
102
148
length -= 8 - ofbit ;
103
149
ofbit = 0 ;
@@ -119,54 +165,11 @@ public long readBit(byte[] data, long offsetBit, long length) {
119
165
}
120
166
121
167
if (length > 0 ) {
122
- data [of ] &= andMask (ofbit ) | (0xff - andMask ((int ) length + ofbit ));
123
- data [of ] |= readInt ((int )length ) << ofbit ;
168
+ data [of ] &= andMask (ofbit ) | (0xff - andMask ((int ) length + ofbit ));
169
+ data [of ] |= readInt ((int ) length ) << ofbit ;
124
170
}
125
171
return retLength ;
126
172
}
127
-
128
- /**
129
- * ビット読み込み.
130
- * バイト順では下位バイトが先頭
131
- * @param bit 0 から 32ぐらい 32を超える場合は先頭のみ返され残りはskipされる形
132
- * @return |xxdcba98|76543210|
133
- */
134
- @ Override
135
- public int readInt (int bit ) {
136
- if (bit > bitLength ()) {
137
- throw new java .lang .IndexOutOfBoundsException ();
138
- }
139
- int ret = 0 ;
140
- int flen = 8 - readPadding ;
141
- if (bit >= flen ) { // そのまま
142
- ret = (int ) ((pac .read () >> readPadding ) & andMask (flen ));
143
- bit -= flen ;
144
- readPadding = 0 ;
145
- }
146
- int len = (int ) bit / 8 ;
147
- if (len > 0 ) {
148
- byte [] d = new byte [len ];
149
- pac .read (d );
150
- for (byte x : d ) {
151
- ret |= (x & 0xff ) << flen ;
152
- flen += 8 ;
153
- }
154
- bit -= len * 8 ;
155
- }
156
- if (bit > 0 ) { // bit = 1~7 ビット構造で異なる
157
- int d = ((pac .read () >> readPadding ) & andMask (bit )) << flen ;
158
- readPadding += bit ;
159
- ret |= d ;
160
- if (pac .length () == 0 && readPadding + writePadding == 8 ) {
161
- readPadding = 0 ;
162
- writePadding = 0 ;
163
- } else {
164
- d &= andMask (8 - readPadding ) << bit ;
165
- pac .backWrite (d );
166
- }
167
- }
168
- return ret ;
169
- }
170
173
}
171
174
172
175
/**
@@ -177,8 +180,9 @@ class BackLittleBitInputStream extends BitInputStream {
177
180
/**
178
181
* 逆ビット読み込み.
179
182
* 書き込んだ方向から読み込む
183
+ *
180
184
* @param bit 0 から 32ぐらい
181
- * @return
185
+ * @return
182
186
*/
183
187
@ Override
184
188
public int readInt (int bit ) {
@@ -220,7 +224,7 @@ public int readInt(int bit) {
220
224
221
225
/**
222
226
* Little Endian が成立する形で背面から読み込み.
223
- *
227
+ *
224
228
* @param data 読み込み先
225
229
* @param offsetBit data bit位置
226
230
* @param length bitサイズ
@@ -258,22 +262,22 @@ public long readBit(byte[] data, final long offsetBit, long length) {
258
262
length -= 8 ;
259
263
}
260
264
if (length > 0 ) { // メモ 下位ビットから埋める // 先頭は上ビットを埋める
261
- if ( ofbit == 0 ) {
265
+ if (ofbit == 0 ) {
262
266
of --;
263
267
ofbit = 8 ;
264
268
}
265
- int n = ofbit - (int )length ;
269
+ int n = ofbit - (int ) length ;
266
270
data [of ] &= 0xff ^ (andMask ((int ) length ) << n );
267
271
data [of ] |= (byte ) (readInt ((int ) length ) << n );
268
272
}
269
273
270
274
return retLength ;
271
275
}
272
-
276
+
273
277
@ Override
274
278
public LittleBitPacket readPac (int bitLength ) {
275
- byte [] tmp = new byte [(bitLength + 7 ) / 8 ];
276
- readBit (tmp ,0 , bitLength );
279
+ byte [] tmp = new byte [(bitLength + 7 ) / 8 ];
280
+ readBit (tmp , 0 , bitLength );
277
281
LittleBitPacket p = new LittleBitPacket ();
278
282
p .writeBit (tmp , 0 , bitLength );
279
283
return p ;
@@ -307,7 +311,7 @@ public void writeBit(int data, int bitLength) {
307
311
}
308
312
}
309
313
310
- if ( bitLength >= 8 ) {
314
+ if (bitLength >= 8 ) {
311
315
byte [] b = new byte [bitLength / 8 ];
312
316
int i = 0 ;
313
317
while (bitLength >= 8 ) {
@@ -325,6 +329,7 @@ public void writeBit(int data, int bitLength) {
325
329
326
330
/**
327
331
* 書き
332
+ *
328
333
* @param data データ含む列
329
334
* @param bitOffset ビット位置
330
335
* @param bitLength ビット長
@@ -333,22 +338,23 @@ public void writeBit(int data, int bitLength) {
333
338
public void writeBit (byte [] data , long bitOffset , long bitLength ) {
334
339
int of = (int ) (bitOffset / 8 );
335
340
int bit = (int ) (bitOffset % 8 );
336
-
341
+
342
+ /*
337
343
if (bit > 0 && bitLength >= (8 - bit)) {
338
344
int d = data[of] & 0xff;
339
345
writeBit(d >>> bit, 8 - bit);
340
346
of++;
341
347
bitLength -= bit;
342
348
bit = 0;
343
349
}
344
-
350
+ */
345
351
while (bit + bitLength >= 32 ) {
346
352
writeBit ((data [of ] & 0xff ) | ((data [of + 1 ] & 0xff ) << 8 ) | ((data [of + 2 ] & 0xff ) << 16 ) | ((data [of + 3 ] & 0xff ) << 24 ), 32 - bit );
347
353
of += 4 ;
348
354
bitLength -= 32 - bit ;
349
355
bit = 0 ;
350
356
}
351
-
357
+
352
358
while (bit + bitLength >= 16 ) {
353
359
writeBit ((data [of ] & 0xff ) | ((data [of + 1 ] & 0xff ) << 8 ), 16 - bit );
354
360
of += 2 ;
@@ -362,10 +368,10 @@ public void writeBit(byte[] data, long bitOffset, long bitLength) {
362
368
bitLength -= 8 - bit ;
363
369
bit = 0 ;
364
370
}
365
-
371
+
366
372
if (bitLength > 0 ) {
367
373
int d = data [of ] & 0xff ;
368
- writeBit (d >>> bit , (int )bitLength );
374
+ writeBit (d >>> bit , (int ) bitLength );
369
375
}
370
376
}
371
377
}
@@ -378,7 +384,7 @@ class BackLittleBitOutputStream extends BitOutputStream {
378
384
/**
379
385
* 簡単な int, long
380
386
* |76543210|fedbca98|
381
- *
387
+ *
382
388
* @param data データ
383
389
* @param bitLength 書き込みビット長
384
390
*/
@@ -418,7 +424,7 @@ public void writeBit(int data, int bitLength) {
418
424
419
425
/**
420
426
* backWriteBit
421
- *
427
+ *
422
428
* @param data data
423
429
* @param bitOffset ビット位置
424
430
* @param bitLength ビット長
@@ -438,9 +444,9 @@ public void writeBit(byte[] data, long bitOffset, long bitLength) {
438
444
int v ;
439
445
while (bitLength >= 24 ) {
440
446
of -= 3 ;
441
- v = (data [of ] & 0xff )
442
- | ((data [of + 1 ] & 0xff ) << 8 )
443
- | ((data [of + 2 ] & 0xff ) << 16 );
447
+ v = ( data [of ] & 0xff )
448
+ | ((data [of + 1 ] & 0xff ) << 8 )
449
+ | ((data [of + 2 ] & 0xff ) << 16 );
444
450
writeBit (v , 24 );
445
451
bitLength -= 24 ;
446
452
}
@@ -450,12 +456,12 @@ public void writeBit(byte[] data, long bitOffset, long bitLength) {
450
456
bitLength -= 8 ;
451
457
}
452
458
if (bitLength > 0 ) { // メモ 下位ビットから埋める // 先頭は上ビットを埋める
453
- if ( ofbit == 0 ) {
459
+ if (ofbit == 0 ) {
454
460
of --;
455
461
ofbit = 8 ;
456
462
}
457
- int n = ofbit - (int )bitLength ;
458
- writeBit (data [of ] >> n , (int )bitLength );
463
+ int n = ofbit - (int ) bitLength ;
464
+ writeBit (data [of ] >> n , (int ) bitLength );
459
465
}
460
466
}
461
467
}
@@ -474,7 +480,6 @@ public LittleBitPacket readPacket(long length) {
474
480
return lp ;
475
481
}
476
482
477
-
478
483
@ Override
479
484
public LittleBitPacket backReadPacket (long length ) {
480
485
LittleBitPacket bp = new LittleBitPacket ();
0 commit comments