首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

怎的修改下这个程序?里面有详细说明

2013-08-06 
怎样修改下这个程序?里面有详细说明就是把getFileFromBytes方法中file new File(c:/tmp.jpg) 的c:/t

怎样修改下这个程序?里面有详细说明

就是把getFileFromBytes方法中file = new File("c:/tmp.jpg"); 的"c:/tmp.jpg"去掉,我想直接把二进制byte流变成图片文件显示,不想保存临时文件"c:/tmp.jpg"
怎么实现呢?


package picToBin;

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

class ImagePanel extends JPanel {

private BufferedImage image;

public ImagePanel() {
try {
byte[] b = fileT0Byte();
File file=getFileFromBytes(b);
//File file = (File) getObject(b);
image = ImageIO.read(file);
// image = ImageIO.read(new File("c:\\rose.jpg"));
} catch (IOException ex) {
// handle exception...
}
}

@Override
public void paintComponent(Graphics g) {
g.drawImage(image, 0, 0, null);
}

public static byte[] fileT0Byte() throws IOException {

String path = "c://2013-08.jpg";
File file = new File(path);

FileInputStream fis = new FileInputStream(file);
byte[] b = new byte[fis.available()];
fis.read(b);// 写入到byte数组
return b;

}

//public static Object getObject(byte[] b) {
//Object o = null;
//try {
//ByteArrayInputStream bais = new ByteArrayInputStream(b);
//ObjectInputStream ois;
//ois = new ObjectInputStream(bais);
//o = ois.readObject();
//// ArrayList str = (ArrayList) ois.readObject(); //读取类
//} catch (Exception e) {
//// TODO Auto-generated catch block
//e.printStackTrace();
//}
//return o;
//}

public static File getFileFromBytes(byte[] b) {
BufferedOutputStream stream = null;
File file = null;
try {
file = new File("c:/tmp.jpg");
FileOutputStream fstream = new FileOutputStream(file);
stream = new BufferedOutputStream(fstream);
stream.write(b);
} catch (Exception e) {
e.printStackTrace();


} finally {
if (stream != null) {
try {
stream.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
return file;
}

}


[解决办法]
使用ByteArrayOutputStream 和ByteArrayInputStream可以解决。
[解决办法]
这里有一个例子


Class.forName(driverName);  
con = DriverManager.getConnection(url,userName,password);  
stmt=con.createStatement();  
ResultSet rs=stmt.executeQuery("SELECT photo FROM t_kk_applicant Where kk_applicant_id='N7V9FS3005421993' and photo is not null");  
while (rs.next()) {  
      
Blob test=rs.getBlob("photo");  
int blobLength = (int) test.length();  
byte[] blobAsBytes = test.getBytes(1, blobLength);  
System.out.println("Length"+blobLength);  
  
System.out.println("testlen"+blobAsBytes.length);  
  
  
  
BufferedImage image = ImageIO.read( new ByteArrayInputStream( blobAsBytes ) );  

[解决办法]
哈哈,看我的!
ImageIcon icon = new ImageIcon(byte[] imageData);//imageData数据库中二进制数据
Image image = icon.getImage();//获取image
方法有点取巧,不过这个不需要另存为临时文件,应该满足楼主需要了。

热点排行