Sembra che tu stia chiedendo due cose diverse qui:
-
changing the values of some fields
Ti stai riferendo a come hai bisogno di normalizzare le formattazioni dei valori (
"yyyy-MM-dd"
in
"ddMMyy"
) o forse anche i tipi di dati qui (% da% di conteggio a% di
BigDecimal
)? In tal caso, ti suggerisco di creare una classe di conversione per gestirli, in modo da poter eliminare in modo sicuro sia la conversione che gli errori API nella tua classe.
-
making changes such that the new file complies to older schema
Wells, le librerie di serializzazione e il modo in cui gestiscono la risoluzione dello schema mi sono venute immediatamente in mente, come ad esempio
come Apache Avro lo fa ... Se riesci a considerare i tuoi oggetti / file di dati (hmms un po 'troppo per questi ultimi) da gestire come una forma di serializzazione, allora queste librerie meritano sicuramente una visita qui,
perché il problema è molto probabilmente risolto per te . Per il confronto completo sulla risoluzione dello schema,
questo l'articolo è un ottimo, anche se un po 'travolgente, letto.
modifica Dato il rischio di link put, citerò solo le parti rilevanti dell'articolo qui ...
- Then you find that people are stuffing all sorts of random fields into their objects, using inconsistent types, and you’d quite like a schema and some documentation... hey, if you had a schema, you could avoid storing objects’ field names, and you could save some more bytes!
Once you get to the fourth stage, your options are typically Thrift, Protocol Buffers or Avro. All three provide efficient, cross-language serialization of data using a schema, and code generation for the Java folks.
In real life, data is always in flux. The moment you think you have finalised a schema, someone will come up with a use case that wasn’t anticipated, and wants to “just quickly add a field”. Fortunately Thrift, Protobuf and Avro all support schema evolution: you can change the schema, you can have producers and consumers with different versions of the schema at the same time, and it all continues to work. That is an extremely valuable feature when you’re dealing with a big production system, because it allows you to update different components of the system independently, at different times, without worrying about compatibility.