Отличный улов! :) Я тоже просмотрел код и не нашел способа обойти эту проблему, не касаясь кода библиотеки. Но даже у этого есть проблемы, как я вижу.
Я думаю, что причина, по которой CSVParser
не Serializable
, заключается в том, что он сохраняет файл открытым до завершения чтения. Если разрешено сериализацию, то это означает, что во время десериализации (возможно, в другой системе или в тот момент, когда файл больше не существует) объект по-прежнему ссылается на файл!
Таким образом, даже если вы измените код библиотеки, скажем, на удаление final
из CSVParser
и напишите сериализуемый подкласс или создадите parser
поле transient
в CSVRecord
, оно все равно не будет помогите, потому что десериализованный класс не будет работать, как объяснено выше.
Следовательно, я вижу только выполнимый способ не-сериализации (ie, JSON или Map
, et c. ).