我正在研究一个Java Web应用程序,其中文件将存储在数据库中。最初,我们通过在结果集上调用getBytes
来检索数据库中已经存在的文件:
byte[] bytes = resultSet.getBytes(1);
...
然后使用显而易见的构造函数将此字节数组转换为
DataHandler
:dataHandler=new DataHandler(bytes,"application/octet-stream");
直到我们开始尝试存储和检索更大的文件之前,这一直很好。将整个文件内容转储到字节数组中,然后从中构建
DataHandler
仅仅需要太多内存。我的直接想法是使用
getBinaryStream
检索数据库中的数据流,并以某种内存有效的方式以某种方式将InputStream
转换为DataHandler
。不幸的是,似乎没有直接的方法可以将InputStream
转换为DataHandler
。我一直在玩的另一个想法是从InputStream
中读取数据块并将其写入OutputStream
的DataHandler
中。但是...我找不到一种方法来创建一个“空” DataHandler
,当我调用OutputStream
时它返回一个非空的getOutputStream
...有人这样做吗?我会很感激您能给我或引导正确方向的任何帮助。
最佳答案
我的方法是编写一个实现类DataSource
的自定义类,该类包装您的InputStream
。然后创建DataHandler
,为其提供创建的DataSource
。
关于java - 如何将InputStream转换为DataHandler?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2830561/