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

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 =

我已经在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();
  }
}
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提供的解决方案,或者只传递您已经创建的输入流。

为什么它不“提供[您]所需”?“转换为文件而不将文件写入磁盘”在术语上是矛盾的。根据定义,文件在磁盘上。这个问题毫无意义。