gpt4 book ai didi

java - 如何将 InputStream 转换为 DataHandler?

转载 作者:IT老高 更新时间:2023-10-28 20:31:58 30 4
gpt4 key购买 nike

我正在开发一个将文件存储在数据库中的 java web 应用程序。最初,我们通过简单地在结果集上调用 getBytes 来检索数据库中已经存在的文件:

byte[] bytes = resultSet.getBytes(1);
...

然后使用明显的构造函数将该字节数组转换为 DataHandler:

dataHandler=new DataHandler(bytes,"application/octet-stream");

在我们开始尝试存储和检索更大的文件之前,这非常有效。将整个文件内容转储到一个字节数组中,然后从中构建一个 DataHandler 只需要太多内存。

我的直接想法是使用 getBinaryStream 检索数据库中的数据流,并以某种方式将该 InputStream 转换为 DataHandler 在节省内存的方式。不幸的是,似乎没有直接的方法可以将 InputStream 转换为 DataHandler。我一直在玩的另一个想法是从 InputStream 读取数据 block 并将它们写入 DataHandlerOutputStream。但是...当我调用 getOutputStream 时,我找不到创建返回非空 OutputStream 的“空”DataHandler 的方法...

有人做过吗?如果您能给我提供任何帮助或指引正确的方向,我将不胜感激。

最佳答案

“Kathy Van Stone”回答的实现:

首先创建辅助类,从 InputStream 创建 DataSource:

public class InputStreamDataSource implements DataSource {
private InputStream inputStream;

public InputStreamDataSource(InputStream inputStream) {
this.inputStream = inputStream;
}

@Override
public InputStream getInputStream() throws IOException {
return inputStream;
}

@Override
public OutputStream getOutputStream() throws IOException {
throw new UnsupportedOperationException("Not implemented");
}

@Override
public String getContentType() {
return "*/*";
}

@Override
public String getName() {
return "InputStreamDataSource";
}
}

然后你可以从 InputStream 中创建 DataHandler:

DataHandler dataHandler = new DataHandler(new InputStreamDataSource(inputStream))

进口:

import javax.activation.DataSource;
import java.io.OutputStream;
import java.io.InputStream;

关于java - 如何将 InputStream 转换为 DataHandler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2830561/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com