The various implementations of Blob are a mess.
The current state is:
- AbstractBlob (transferTo & copy methods) (no direct refs)
- DefaultBlob (getters) (no direct refs)
- ByteArrayBlob
- StringBlob
- BlobWrapper (changes filename)
- StreamingBlob (from StreamSource, checks if can reopen)
- TemporaryFileBlob (new, 2 versions, 1 deprecated)
- TmpStreamingBlob (unit test)
- StreamBlob (no direct refs except 1 test)
- DefaultStreamBlob (getters) (identical to DefaultBlob) (no direct refs)
- FileBlob
- InputStreamBlob
- SQLBlob
- URLBlob (used once in operation)
- DefaultStreamBlob (getters) (identical to DefaultBlob) (no direct refs)
- DefaultBlob (getters) (no direct refs)
- SQLBlob (adds getBinary)
- StorageBlob
Simplify this to:
- AbstractBlob (getters + transferTo & copy methods) (no direct refs)
- ByteArrayBlob
- FileBlob
- StorageBlob
- StringBlob
- URLBlob
- ZipEntryBlob
- BlobWrapper
In addition, InputStreamBlob + ByteArrayInputStream is being used in many operations when StringBlob would be simpler.