java緩存讀取圖片
老師布置了任務,需要把數據庫中的圖片一緩存的形式讀出,不要說什么數據庫中路勁,圖片整體較大,在給別人使用時不現實。
關鍵代碼:for(int?i=0;i<1;i++){
downloadDB(bi);
pm[i]=new?paintimage(bi);
}
public?void?downloadDB(BufferedImage?bi){
try{
/*?String?s="c:\\downloadDB\\"+i+".png";
File?file=new?File(s);
FileOutputStream?fos=new?FileOutputStream(file);*/
InputStream?in=null;
String?url="jdbc:mysql://192.168.**.***:3306/de";
Class.forName("com.mysql.jdbc.Driver");
Connection?con=DriverManager.getConnection(url,"root","***");
String?sql="select?*?from?campusimage";
Statement?st=con.createStatement();
ResultSet?rs=st.executeQuery(sql);
for(int?j=0;j<1;j++)
rs.next();
int?m;
if(rs.next())
in=rs.getBinaryStream(1);
/*while((m=in.read())!=-1)
fos.write(m);*/
BufferedInputStream?is=new?BufferedInputStream(in);
bi=ImageIO.read(is);
System.out.println("00000000000");
rs.close();
st.close();
con.close();
}catch(Exception?e){e.printStackTrace();}
}
class?paintimage?extends?JPanel{
//ImageIcon?icon=null;
Image?ima=null;
paintimage(BufferedImage?bi){
/*String?s1="c:\\downloadDB\\"+i+".png";
icon=new?ImageIcon(s1);
ima=icon.getImage();*/
ima=(Image)bi;
setBounds(0,0,700,600);
System.out.println("1111111111");
}
public?void?paint(Graphics?g){
g.drawImage(ima,0,0,700,600,null);
System.out.println("2222222222");
}
}
求指教,我會出的是空白圖。
java
緩存
圖片
數據庫
mysql
分享到:
------解決方案--------------------
如果讀出來是16進制字符串的話,
16進制字符串-》byte數組-》流-》文件
public?class?ImgHelper?{
public?static?void?getImg(String?hexString)?{
byte[]?b?=?ByteHelper.hexStringToBytes(hexString);
InputStream?is?=?ByteHelper.byte2Input(b);
createFile(is,?new?File("D://pp.jpg"));
}
//生成圖像文件
public?static?void?createFile(InputStream?is,?File?targetFile)?{
BufferedInputStream?inBuff?=?null;
BufferedOutputStream?outBuff?=?null;
try?{
//?新建文件輸入流并對它進行緩沖
inBuff?=?new?BufferedInputStream(is);
//?新建文件輸出流并對它進行緩沖
try?{
outBuff?=?new?BufferedOutputStream(new?FileOutputStream(
targetFile));
//?緩沖數組
byte[]?b?=?new?byte[1024?*?5];
int?len;
while?((len?=?inBuff.read(b))?!=?-1)?{
outBuff.write(b,?0,?len);
}
//?刷新此緩沖的輸出流
outBuff.flush();
}?catch?(Exception?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
}?finally?{
//?關閉流
try?{
if?(inBuff?!=?null)
inBuff.close();
if?(outBuff?!=?null)
outBuff.close();
}?catch?(IOException?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
}
}
}
public?class?ByteHelper?{
public?static?byte[]?hexStringToBytes(String?hexString)?{
if?(hexString?==?null
------解決方案--------------------
hexString.equals(""))?{
return?null;
}
hexString?=?hexString.toUpperCase();
int?length?=?hexString.length()?/?2;
char[]?hexChars?=?hexString.toCharArray();
byte[]?d?=?new?byte[length];
for?(int?i?=?0;?i?
int?pos?=?i?*?2;