Java 将字节数组转换为文件而不将文件写入磁盘
我已经在mysql数据库中以字节的形式保存了图标大小的图像,现在,我需要做的是从数据库中检索这些文件字节并在swing应用程序中显示这些图像,我有一个方法可以从数据库中获取字节并将其转换回文件,但我必须将该文件写入磁盘 这是我的方法,Java 将字节数组转换为文件而不将文件写入磁盘,java,swing,file,Java,Swing,File,我已经在mysql数据库中以字节的形式保存了图标大小的图像,现在,我需要做的是从数据库中检索这些文件字节并在swing应用程序中显示这些图像,我有一个方法可以从数据库中获取字节并将其转换回文件,但我必须将该文件写入磁盘 这是我的方法, public void downloadFile(int FamerId) throws Exception { String sql = "SELECT * FROM images WHERE famer_id=?"; Connection con =
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();
}
}
public void downloadFile(int-FamerId)引发异常{
String sql=“从图像中选择*,其中famer_id=?”;
Connection con=JDBCConnectionPool.getInstance().checkOut();
PreparedStatement ps=con.prepareStatement(sql);
ps.setInt(1,FamerId);
ResultSet ResultSet=ps.executeQuery();
整数计数=0;
while(resultSet.next()){
ByteArrayInputStream bais;
ObjectInputStream输入流;
bais=新的ByteArrayInputStream(resultSet.getBytes(“image”);
inputStream=新对象inputStream(BAI);
SaveFile sf=(SaveFile)inputStream.readObject();
FileOutputStream out=新的FileOutputStream(“fileLocation/”+resultSet.getString(“image_name”);
byte[]bytes=sf.getArray();
int c=0;
while(c
但是这个方法不能满足我的需要,请帮助我。你可以用这个类直接从字节流中读取图像。当然,假设您以前以兼容格式写入了图像数据。这很难说,因为在代码中读取字节数据时使用了中间对象输入流。下面是一个示例,说明如何直接从数据库创建图像,而不使用中间文件:
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
您的问题的答案取决于平台。从文件中 文件输出流是用于将数据写入文件或文件的输出流 指向文件描述符。文件是否可用或是否可用 创建依赖于底层平台。一些平台,在 特别是,只允许一个用户打开一个文件进行写入 FileOutputStream(或其他文件写入对象)。这样 如果文件 这项工作已经开始了 FileOutputStream用于写入原始字节流,例如 图像数据。编写字符流时,请考虑使用 文件编写器 所以,若您想写入一个文件,那个么文件可能会被创建,也可能不会被创建
如果您不想创建文件,而只对字节[](文件内容)感兴趣,那么您可以使用@Perception提供的解决方案,或者只传递您已经创建的输入流。为什么它不“提供[您]所需”?“转换为文件而不将文件写入磁盘”在术语上是矛盾的。根据定义,文件在磁盘上。这个问题毫无意义。