2011-08-16 15 views
8

Sto lavorando su un progetto in cui la serializzazione nativa di Java è lenta, quindi vogliamo passare all'implementazione dell'interfaccia Externalize sulle classi per prestazioni superiori.Genera Java Externalizable readExternal()/writeExternal() blocca automaticamente

Tuttavia, queste classi hanno molti membri di dati e abbiamo realizzato che è facile commettere errori durante la scrittura di questi due metodi. Stiamo solo leggendo/scrivendo tutti i membri della classe in queste funzioni, niente di speciale. C'è un modo per generare i blocchi writeExternal() per esternalizzare automaticamente in un processo offline o in fase di compilazione?

Ho dato un'occhiata a http://projectlombok.org/, e qualcosa del genere sarebbe stato l'ideale.

Analogamente, vorremmo mantenere immutabili queste classi, ma le classi immutabili non possono implementare l'interfaccia esternalizzabile - vogliamo usare il modello di classe proxy da java efficace - avere anche quello generato sarebbe utile.

risposta

1

Sto lavorando su un progetto in cui la serializzazione nativa di Java è lento

Come lento? Perché? Rendere più veloce con un sacco di codici a mano è molto improbabile che sia economicamente fattibile o mantenibile a lungo termine. Le spese generali di serializzazione dovrebbero in realtà ridursi al tempo e ai limiti di spazio nella trasmissione. Non vi è alcun motivo particolare per cui la serializzazione predefinita di Java debba essere sorprendentemente più lenta del risultato di tutta la codifica manuale che si sta pianificando. Faresti meglio a indagare sulle cause. Ad esempio, potresti trovare un BufferedOutputStream ben posizionato per risolvere tutti i tuoi problemi.

+1

Utilizza la riflessione in fase di esecuzione per la serializzazione, che sarà sempre più lenta. Consulta http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking per confrontare i diversi metodi di serializzazione. – MrLebowski

+0

@MrLebowski Sono consapevole del suo uso di Reflection, ma in pratica domina veramente le larghezze di banda della rete e del disco? e lo hanno incluso nei test? o semplicemente serializzare su ByteArrayOutputStreams per esempio? Potresti scoprire che tutto questo è completamente accademico. – EJP

+0

Grazie per avermelo fatto notare. Controlla le statistiche qui: http://pastebin.com/yi4JhhVb --- Quindi l'aumento del tempo relativo alla serializzazione totale passando da externalizable a serializable è di circa 1ms - è l'aumento del tempo di rete che è male. Sto provando il flusso compresso e vedere se aiuta. L'esternalizzazione ancora automatizzata o una migliore serializzazione automatizzata saranno le migliori. – MrLebowski

Problemi correlati