Problemas com deflater

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…

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) {..

Bom, aparentemente os arrays de bytes são os mesmo, porém há uma diferença de tamanho…

Ainda não entendi. Como duas coisas iguais podem ter tamanhos diferentes?

é 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?

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.