Edu4rd0
Fevereiro 22, 2005, 9:43am
#1
Pessoal, criei um eskema de compremir objetos usando deflater, o problema eh que na hora de descomprimir, usando inflater, os bytes dos objetos não são iguais, cada um tem um tamanho diferente do outro… por que ocorre isso?
private byte[] comprime( Object objeto ) throws IOException
{
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
DeflaterOutputStream deflater = new DeflaterOutputStream( byteArrayOutputStream );
ObjectOutputStream saidaObjeto = new ObjectOutputStream( deflater );
saidaObjeto.writeObject( objeto );
saidaObjeto.flush();
saidaObjeto.close();
deflater.close();
return byteArrayOutputStream.toByteArray();
}
private Object decomprime( byte[] arrayComprimido ) throws IOException, ClassNotFoundException
{
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream( arrayComprimido );
InflaterInputStream inflater = new InflaterInputStream( byteArrayInputStream );
ObjectInputStream entradaObjeto = new ObjectInputStream( inflater );
Object objetoLido = entradaObjeto.readObject();
entradaObjeto.close();
return objetoLido;
}
private byte[] getBytes( Object objeto ) throws IOException
{
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream saidaObjeto = new ObjectOutputStream( byteArrayOutputStream );
saidaObjeto.writeObject( objeto );
saidaObjeto.flush();
saidaObjeto.close();
return byteArrayOutputStream.toByteArray();
}
Uma coisa, um objeto de 956 bytes originais, passa pra 983 quando descomprimido, sendo que os valores bytes iniciais e finais dos objetos são os mesmos… Comprimido ele fica com 865 bytes…
thingol
Fevereiro 22, 2005, 9:49am
#2
Aham, não entendi direito - o que acontece, a saída fica diferente da entrada? (para facilitar o seu serviço, acostume-se a sempre imprimir os bytes de um byte array em hexadecimal. Vou facilitar o seu serviço mais uma vez e postar uma função que imprime um byte array em hexa, como se fosse um utilitário hexdump).
static void printHex(byte[] b) {
for (int i = 0; i < b.length; ++i) {
if (i % 16 == 0) {
System.out.print (Integer.toHexString ((i & 0xFFFF) | 0x10000).substring(1,5) + " - ");
}
System.out.print (Integer.toHexString((b[i]&0xFF) | 0x100).substring(1,3) + " ");
if (i % 16 == 15 || i == b.length - 1)
{
int j;
for (j = 16 - i % 16; j > 1; --j)
System.out.print (" ");
System.out.print (" - ");
int start = (i / 16) * 16;
int end = (b.length < i + 1) ? b.length : (i + 1);
for (j = start; j < end; ++j)
if (b[j] >= 32 && b[j] <= 126)
System.out.print ((char)b[j]);
else
System.out.print (".");
System.out.println ();
}
}
System.out.println();
}
O formato de saída dessa função é algo como:
0000 - 69 6d 70 6f 72 74 20 6a 61 76 61 2e 69 6f 2e 2a - import java.io.*
0010 - 3b 0d 0a 69 6d 70 6f 72 74 20 6a 61 76 61 2e 75 - ;..import java.u
0020 - 74 69 6c 2e 2a 3b 0d 0a 0d 0a 70 75 62 6c 69 63 - til.*;....public
0030 - 20 63 6c 61 73 73 20 48 65 78 44 75 6d 70 20 7b - class HexDump {
0040 - 0d 0a 20 20 20 20 73 74 61 74 69 63 20 76 6f 69 - .. static voi
0050 - 64 20 70 72 69 6e 74 48 65 78 28 62 79 74 65 5b - d printHex(byte[
0060 - 5d 20 62 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 - ] b) {..
Edu4rd0
Fevereiro 22, 2005, 10:09am
#3
Bom, aparentemente os arrays de bytes são os mesmo, porém há uma diferença de tamanho…
thingol
Fevereiro 22, 2005, 10:18am
#4
Ainda não entendi. Como duas coisas iguais podem ter tamanhos diferentes?
Edu4rd0
Fevereiro 22, 2005, 3:33pm
#5
é isso que acontece, o original tem um tamanho diferente do descomprimido, aki estah o hexdump:
Original:
0000 - ac ed 00 05 73 72 00 2e 65 63 66 76 2e 63 6f 6d - ....sr..ecfv.com
0010 - 70 61 72 74 69 6c 68 61 6d 65 6e 74 6f 2e 65 6c - partilhamento.el
0020 - 67 61 6d 61 6c 2e 45 6c 47 61 6d 61 6c 50 75 62 - gamal.ElGamalPub
0030 - 6c 69 63 4b 65 79 1f 14 67 33 46 bf b2 46 02 00 - licKey..g3F..F..
0040 - 01 4c 00 02 6d 59 74 00 16 4c 6a 61 76 61 2f 6d - .L..mYt..Ljava/m
0050 - 61 74 68 2f 42 69 67 49 6e 74 65 67 65 72 3b 78 - ath/BigInteger;x
0060 - 72 00 28 65 63 66 76 2e 63 6f 6d 70 61 72 74 69 - r.(ecfv.comparti
0070 - 6c 68 61 6d 65 6e 74 6f 2e 65 6c 67 61 6d 61 6c - lhamento.elgamal
0080 - 2e 45 6c 47 61 6d 61 6c 4b 65 79 21 cd bb 9c f1 - .ElGamalKey!....
0090 - 2e e0 d4 02 00 02 4c 00 02 6d 47 71 00 7e 00 01 - ......L..mGq.~..
00a0 - 4c 00 02 6d 50 71 00 7e 00 01 78 70 73 72 00 14 - L..mPq.~..xpsr..
00b0 - 6a 61 76 61 2e 6d 61 74 68 2e 42 69 67 49 6e 74 - java.math.BigInt
00c0 - 65 67 65 72 8c fc 9f 1f a9 3b fb 1d 03 00 06 49 - eger.....;.....I
00d0 - 00 08 62 69 74 43 6f 75 6e 74 49 00 09 62 69 74 - ..bitCountI..bit
00e0 - 4c 65 6e 67 74 68 49 00 13 66 69 72 73 74 4e 6f - LengthI..firstNo
00f0 - 6e 7a 65 72 6f 42 79 74 65 4e 75 6d 49 00 0c 6c - nzeroByteNumI..l
0100 - 6f 77 65 73 74 53 65 74 42 69 74 49 00 06 73 69 - owestSetBitI..si
0110 - 67 6e 75 6d 5b 00 09 6d 61 67 6e 69 74 75 64 65 - gnum[..magnitude
0120 - 74 00 02 5b 42 78 72 00 10 6a 61 76 61 2e 6c 61 - t..[Bxr..java.la
0130 - 6e 67 2e 4e 75 6d 62 65 72 86 ac 95 1d 0b 94 e0 - ng.Number.......
0140 - 8b 02 00 00 78 70 ff ff ff ff ff ff ff ff ff ff - ....xp..........
0150 - ff fe ff ff ff fe 00 00 00 01 75 72 00 02 5b 42 - ..........ur..[B
0160 - ac f3 17 f8 06 08 54 e0 02 00 00 78 70 00 00 00 - ......T....xp...
0170 - 80 65 7e d1 e5 2b 41 96 7e 94 02 53 45 30 d3 5a - .e~..+A.~..SE0.Z
0180 - 3c 17 b5 ff 05 54 a3 58 a1 cf c6 8b c5 f6 9a 3d - <....T.X.......=
0190 - 66 f8 56 e2 0b b4 cd e6 f1 f8 79 c0 a2 dd 01 20 - f.V.......y....
01a0 - 86 2e 10 1f 5c a5 3e 31 d1 bc 71 7c e4 d9 0a 80 - ....\.>1..q|....
01b0 - f6 58 ba b8 a8 07 ab 44 75 42 bf ff a8 ec f2 61 - .X.....DuB.....a
01c0 - d0 fe c0 93 39 06 71 7f dd 7c f5 06 2c 73 b7 3b - ....9.q..|..,s.;
01d0 - f7 89 12 43 fe ab d7 b2 2d 47 df c2 60 b7 db 78 - ...C....-G..`..x
01e0 - 6a f3 9b 77 33 08 5a 9b 50 c4 af cb 84 36 16 32 - j..w3.Z.P....6.2
01f0 - 4b 78 73 71 00 7e 00 04 ff ff ff ff ff ff ff ff - Kxsq.~..........
0200 - ff ff ff fe ff ff ff fe 00 00 00 01 75 71 00 7e - ............uq.~
0210 - 00 08 00 00 00 80 b5 11 d5 5f 51 66 c0 29 eb b6 - ........._Qf.)..
0220 - a9 91 91 ff d3 f0 7e c3 93 5a d5 b5 07 cd 9d e9 - ......~..Z......
0230 - 51 ba 37 fd 1a 45 30 37 30 81 36 b4 f5 f1 3b d0 - Q.7..E070.6...;.
0240 - bf 84 1d 45 ce ee f0 15 5f 8e 0f 29 c8 32 83 d1 - ...E...._..).2..
0250 - fb ef a7 e0 f5 eb 72 dd 03 93 c0 0d de 75 63 37 - ......r......uc7
0260 - 6e 4d c4 c0 d5 32 99 94 59 16 bd 0a 7e c4 cb 1d - nM...2..Y...~...
0270 - 36 1b af 12 f2 0f f8 0b 7f 03 03 a4 71 89 cc c7 - 6...........q...
0280 - 4e f8 28 2a d5 54 4d 3b 85 28 03 fc 2f b3 0d 1b - N.(*.TM;.(../...
0290 - 65 f1 f2 20 ab 5d 78 73 71 00 7e 00 04 ff ff ff - e.. .]xsq.~.....
02a0 - ff ff ff ff ff ff ff ff fe ff ff ff fe 00 00 00 - ................
02b0 - 01 75 71 00 7e 00 08 00 00 01 00 1f 32 2d 79 f1 - .uq.~.......2-y.
02c0 - 8c 42 c9 18 27 61 ec 32 ea 24 51 10 2f 23 67 89 - .B..'a.2.$Q./#g.
02d0 - 7f d4 f9 84 a8 b3 c7 ee cf a2 dd 94 54 28 02 30 - ............T(.0
02e0 - 1a 0b a7 e0 a0 83 39 08 f1 83 69 72 54 1b 58 af - ......9...irT.X.
02f0 - b8 8f 7a 01 6b 37 62 7b cf a3 f2 52 b0 70 ae 21 - ..z.k7b{...R.p.!
0300 - a1 bc 20 2b 33 60 58 c1 95 3f 2f 76 f9 49 8c 24 - .. +3`X..?/v.I.$
0310 - 05 13 f8 c1 67 d8 bb 72 92 d5 d4 99 b2 f5 b9 43 - ....g..r.......C
0320 - f8 13 ed 59 fe 27 94 d2 e2 07 25 ec 00 04 cf 27 - ...Y.'....%....'
0330 - be 5f f0 9c d8 00 06 45 23 58 2f 0d 96 7c ed 70 - ._.....E#X/..|.p
0340 - 84 79 01 85 bf 9a 32 f0 2a c4 93 0f ae 02 bb 41 - .y....2.*......A
0350 - f0 b1 c2 6e a7 22 d0 80 94 1d 8a b3 ab d6 ee 21 - ...n.".........!
0360 - 2d 6f 8b ce 6b 4b 93 4e d1 3a c3 3b c6 65 6d 79 - -o..kK.N.:.;.emy
0370 - c6 9d 5a 5d fc 8c 75 17 0d ca 3f 78 86 fd 80 80 - ..Z]..u...?x....
0380 - ea 3c dd 24 8c 4a 38 74 1f d9 6d df 2c 05 f8 24 - .<.$.J8t..m.,..$
0390 - 8e 9f cd 6a 98 c4 0f 7f 86 06 46 a7 44 00 c0 a1 - ...j......F.D...
03a0 - d6 6c 13 78 75 f9 49 be 2c a5 02 2a 4a 36 f7 e3 - .l.xu.I.,..*J6..
03b0 - 94 bb 03 2f f1 fb 1f bb cc 03 fa 78 - .../.......x
Após Descompressão:
0000 - ac ed 00 05 75 72 00 02 5b 42 ac f3 17 f8 06 08 - ....ur..[B......
0010 - 54 e0 02 00 00 78 70 00 00 03 bc ac ed 00 05 73 - T....xp........s
0020 - 72 00 2e 65 63 66 76 2e 63 6f 6d 70 61 72 74 69 - r..ecfv.comparti
0030 - 6c 68 61 6d 65 6e 74 6f 2e 65 6c 67 61 6d 61 6c - lhamento.elgamal
0040 - 2e 45 6c 47 61 6d 61 6c 50 75 62 6c 69 63 4b 65 - .ElGamalPublicKe
0050 - 79 1f 14 67 33 46 bf b2 46 02 00 01 4c 00 02 6d - y..g3F..F...L..m
0060 - 59 74 00 16 4c 6a 61 76 61 2f 6d 61 74 68 2f 42 - Yt..Ljava/math/B
0070 - 69 67 49 6e 74 65 67 65 72 3b 78 72 00 28 65 63 - igInteger;xr.(ec
0080 - 66 76 2e 63 6f 6d 70 61 72 74 69 6c 68 61 6d 65 - fv.compartilhame
0090 - 6e 74 6f 2e 65 6c 67 61 6d 61 6c 2e 45 6c 47 61 - nto.elgamal.ElGa
00a0 - 6d 61 6c 4b 65 79 21 cd bb 9c f1 2e e0 d4 02 00 - malKey!.........
00b0 - 02 4c 00 02 6d 47 71 00 7e 00 01 4c 00 02 6d 50 - .L..mGq.~..L..mP
00c0 - 71 00 7e 00 01 78 70 73 72 00 14 6a 61 76 61 2e - q.~..xpsr..java.
00d0 - 6d 61 74 68 2e 42 69 67 49 6e 74 65 67 65 72 8c - math.BigInteger.
00e0 - fc 9f 1f a9 3b fb 1d 03 00 06 49 00 08 62 69 74 - ....;.....I..bit
00f0 - 43 6f 75 6e 74 49 00 09 62 69 74 4c 65 6e 67 74 - CountI..bitLengt
0100 - 68 49 00 13 66 69 72 73 74 4e 6f 6e 7a 65 72 6f - hI..firstNonzero
0110 - 42 79 74 65 4e 75 6d 49 00 0c 6c 6f 77 65 73 74 - ByteNumI..lowest
0120 - 53 65 74 42 69 74 49 00 06 73 69 67 6e 75 6d 5b - SetBitI..signum[
0130 - 00 09 6d 61 67 6e 69 74 75 64 65 74 00 02 5b 42 - ..magnitudet..[B
0140 - 78 72 00 10 6a 61 76 61 2e 6c 61 6e 67 2e 4e 75 - xr..java.lang.Nu
0150 - 6d 62 65 72 86 ac 95 1d 0b 94 e0 8b 02 00 00 78 - mber...........x
0160 - 70 ff ff ff ff ff ff ff ff ff ff ff fe ff ff ff - p...............
0170 - fe 00 00 00 01 75 72 00 02 5b 42 ac f3 17 f8 06 - .....ur..[B.....
0180 - 08 54 e0 02 00 00 78 70 00 00 00 80 65 7e d1 e5 - .T....xp....e~..
0190 - 2b 41 96 7e 94 02 53 45 30 d3 5a 3c 17 b5 ff 05 - +A.~..SE0.Z<....
01a0 - 54 a3 58 a1 cf c6 8b c5 f6 9a 3d 66 f8 56 e2 0b - T.X.......=f.V..
01b0 - b4 cd e6 f1 f8 79 c0 a2 dd 01 20 86 2e 10 1f 5c - .....y.... ....\
01c0 - a5 3e 31 d1 bc 71 7c e4 d9 0a 80 f6 58 ba b8 a8 - .>1..q|.....X...
01d0 - 07 ab 44 75 42 bf ff a8 ec f2 61 d0 fe c0 93 39 - ..DuB.....a....9
01e0 - 06 71 7f dd 7c f5 06 2c 73 b7 3b f7 89 12 43 fe - .q..|..,s.;...C.
01f0 - ab d7 b2 2d 47 df c2 60 b7 db 78 6a f3 9b 77 33 - ...-G..`..xj..w3
0200 - 08 5a 9b 50 c4 af cb 84 36 16 32 4b 78 73 71 00 - .Z.P....6.2Kxsq.
0210 - 7e 00 04 ff ff ff ff ff ff ff ff ff ff ff fe ff - ~...............
0220 - ff ff fe 00 00 00 01 75 71 00 7e 00 08 00 00 00 - .......uq.~.....
0230 - 80 b5 11 d5 5f 51 66 c0 29 eb b6 a9 91 91 ff d3 - ...._Qf.).......
0240 - f0 7e c3 93 5a d5 b5 07 cd 9d e9 51 ba 37 fd 1a - .~..Z......Q.7..
0250 - 45 30 37 30 81 36 b4 f5 f1 3b d0 bf 84 1d 45 ce - E070.6...;....E.
0260 - ee f0 15 5f 8e 0f 29 c8 32 83 d1 fb ef a7 e0 f5 - ..._..).2.......
0270 - eb 72 dd 03 93 c0 0d de 75 63 37 6e 4d c4 c0 d5 - .r......uc7nM...
0280 - 32 99 94 59 16 bd 0a 7e c4 cb 1d 36 1b af 12 f2 - 2..Y...~...6....
0290 - 0f f8 0b 7f 03 03 a4 71 89 cc c7 4e f8 28 2a d5 - .......q...N.(*.
02a0 - 54 4d 3b 85 28 03 fc 2f b3 0d 1b 65 f1 f2 20 ab - TM;.(../...e.. .
02b0 - 5d 78 73 71 00 7e 00 04 ff ff ff ff ff ff ff ff - ]xsq.~..........
02c0 - ff ff ff fe ff ff ff fe 00 00 00 01 75 71 00 7e - ............uq.~
02d0 - 00 08 00 00 01 00 1f 32 2d 79 f1 8c 42 c9 18 27 - .......2-y..B..'
02e0 - 61 ec 32 ea 24 51 10 2f 23 67 89 7f d4 f9 84 a8 - a.2.$Q./#g......
02f0 - b3 c7 ee cf a2 dd 94 54 28 02 30 1a 0b a7 e0 a0 - .......T(.0.....
0300 - 83 39 08 f1 83 69 72 54 1b 58 af b8 8f 7a 01 6b - .9...irT.X...z.k
0310 - 37 62 7b cf a3 f2 52 b0 70 ae 21 a1 bc 20 2b 33 - 7b{...R.p.!.. +3
0320 - 60 58 c1 95 3f 2f 76 f9 49 8c 24 05 13 f8 c1 67 - `X..?/v.I.$....g
0330 - d8 bb 72 92 d5 d4 99 b2 f5 b9 43 f8 13 ed 59 fe - ..r.......C...Y.
0340 - 27 94 d2 e2 07 25 ec 00 04 cf 27 be 5f f0 9c d8 - '....%....'._...
0350 - 00 06 45 23 58 2f 0d 96 7c ed 70 84 79 01 85 bf - ..E#X/..|.p.y...
0360 - 9a 32 f0 2a c4 93 0f ae 02 bb 41 f0 b1 c2 6e a7 - .2.*......A...n.
0370 - 22 d0 80 94 1d 8a b3 ab d6 ee 21 2d 6f 8b ce 6b - ".........!-o..k
0380 - 4b 93 4e d1 3a c3 3b c6 65 6d 79 c6 9d 5a 5d fc - K.N.:.;.emy..Z].
0390 - 8c 75 17 0d ca 3f 78 86 fd 80 80 ea 3c dd 24 8c - .u...?x.....<.$.
03a0 - 4a 38 74 1f d9 6d df 2c 05 f8 24 8e 9f cd 6a 98 - J8t..m.,..$...j.
03b0 - c4 0f 7f 86 06 46 a7 44 00 c0 a1 d6 6c 13 78 75 - .....F.D....l.xu
03c0 - f9 49 be 2c a5 02 2a 4a 36 f7 e3 94 bb 03 2f f1 - .I.,..*J6...../.
03d0 - fb 1f bb cc 03 fa 78 - ......x
Não haveria nenhum acréscimo de bytes ao passar de byte[] para objeto?
thingol
Fevereiro 22, 2005, 5:14pm
#6
Puxa vida, vendo o segundo dump, vemos que ele é o dump de um array de bytes serializado (que casualmente deve ter o seu objeto),
não de um objeto ecvf.compartilhamento.elgamal.ElGamalPublicKey (o dump do primeiro objeto).
Acho que você deve usar algum outro objeto para gravar o seu array de bytes, não DataOutputStream, mas FileOutputStream direto.
É que não li os seus programas direito, mas dá para chutar isso só de ver o
dump.