Хорошо. Я нашел решение.
Решение не в том, чтобы изменить DataHandler, а в том, чтобы изменить FileDataSource.
Создайте новый FileDataSource, скажем, ZipFileDataSource, расширьте FileDataSource и реализуйте метод getInputStream.
Ваш метод getInputStream должен прочитать файл, а GZIPOutputStream - сжать его, и он должен быть передан по каналу вызывающей стороне.
final PipedOutputStream pos = new PipedOutputStream();
final PipedInputStream pis = new PipedInputStream(pos);
FileInputStream fis = null;
GZIPOutputStream gos = null;
byte[] buffer = new byte[1024];
try {
fis = new FileInputStream(MyFile);
gos = new GZIPOutputStream(pos);
int length;
while ((length = fis.read(buffer, 0, 1024)) != -1)
gos.write(buffer, 0, length);
fis.close();
} catch(Exception e){
}
Выше приведен пример кода.
С уважением,
Дхирадж Джоши