java如何将InputStream转换为DataHandler?
我正在开发一个java web应用程序,其中的文件将存储在数据库中。最初,我们只需在结果集中调用getBytes
即可检索数据库中已有的文件:
byte[] bytes = resultSet.getBytes(1);
...
然后,使用明显的构造函数将该字节数组转换为DataHandler
:
dataHandler=new DataHandler(bytes,"application/octet-stream");
在我们开始尝试存储和检索更大的文件之前,这种方法非常有效。将整个文件内容转储到字节数组中,然后从中构建DataHandler
只需要太多内存
我的直接想法是用getBinaryStream
检索数据库中的数据流,并以某种方式以一种内存高效的方式将InputStream
转换为DataHandler
。不幸的是,似乎没有直接的方法将InputStream
转换为DataHandler
。我一直在玩的另一个想法是从InputStream
读取数据块,然后将它们写入DataHandler
的OutputStream
。但是我找不到一种方法来创建一个“空的”DataHandler
,当我调用getOutputStream
时,它返回一个非空的OutputStream
有人这样做过吗?如果你能给我任何帮助,或者给我提供正确的方向,我将不胜感激
# 1 楼答案
我也遇到了这个问题。如果源数据是
byte[]
,那么Axis已经有一个类来包装InputStream并创建DataHandler对象。这是密码相关进口
希望有帮助
# 2 楼答案
请注意,数据源的getInputStream每次调用时都必须返回一个新的InputStream。这意味着,你需要先复制到某个地方。 有关更多信息,请参阅 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4267294
# 3 楼答案
(bugs_uu)代码对我不适用。我使用DataSource创建电子邮件附件(从具有inputStream和name的对象)和丢失的附件内容。 看来Stefan是对的,每次都必须返回新的inputStream。至少在我的特殊情况下。下一个实现将处理以下问题:
# 4 楼答案
《凯西·范·斯通》中答案的实现:
首先创建助手类,该类从InputStream创建数据源:
然后可以从InputStream创建DataHandler:
导入: