gpt4 book ai didi

java - 将字节数组转换为文件而不将文件写入磁盘

转载 作者:行者123 更新时间:2023-11-29 06:00:25 25 4
gpt4 key购买 nike

我已经将图标大小的图像以字节为单位保存在 mysql 数据库中,现在,我需要做的是从数据库中检索这些文件字节并在 swing 应用程序中显示这些图像,我有一个方法可以从数据库并将其转换回文件,但我必须将该文件写入磁盘

这是我的方法,

public void downloadFile(int FamerId) throws Exception {
String sql = "SELECT * FROM images WHERE famer_id=?";
Connection con = JDBCConnectionPool.getInstance().checkOut();
PreparedStatement ps = con.prepareStatement(sql);
ps.setInt(1, FamerId);
ResultSet resultSet = ps.executeQuery();

int count = 0;

while (resultSet.next()) {
ByteArrayInputStream bais;
ObjectInputStream inputStream;

bais = new ByteArrayInputStream(resultSet.getBytes("image"));
inputStream = new ObjectInputStream(bais);
SaveFile sf = (SaveFile) inputStream.readObject();
FileOutputStream out = new FileOutputStream("fileLocation/" + resultSet.getString("image_name"));
byte[] bytes = sf.getArray();

int c = 0;
while (c < bytes.length) {
out.write(bytes[c]);
c++;
}

out.close();
inputStream.close();
bais.close();
JDBCConnectionPool.getInstance().checkOut();
}
}

但是这个方法不能满足我的需要,请帮助我。

最佳答案

您可以使用 ImageIO 直接从字节流中读取图像类(class)。当然假设您之前已经以兼容格式写入了图像数据。这很难说,因为在您的代码中,您在读取字节数据时使用了一个中间对象输入流。下面是一个示例,说明如何在不使用中间文件的情况下直接从数据库创建图像:

bais = new ByteArrayInputStream(resultSet.getBytes("image"));
final BufferedImage image = ImageIO.read(bais);
// pass the image to your Swing layer to be rendered.

还有一个示例,说明如何将数据写入数据库,以便能够使用此代码:

final ByteArrayOutputStream baos = new ByteArrayOutputStream(64000);
ImageIO.write(image, "PNG", baos);
final byte[] data = baos.toByteArray();
// write data to database

关于java - 将字节数组转换为文件而不将文件写入磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10344298/

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