2013年11月1日星期五

java cache read image

Teacher assigned tasks that require the database in the form of a picture a cache read , do not say what database Zhong Jin , the overall picture is large, when used in others unrealistic .
key code : 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");
}
}
seeking advice , I will give you a blank map.
------ Solution ---------------------------------------- ----
If the read out is a hexadecimal string,
16 hex string - "byte array - " flow - "File


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 < length; i++) {  
        int pos = i * 2;  
        d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));  
    }  
    return d;  

public static String bytesToHexString(byte[] src){  
    StringBuilder stringBuilder = new StringBuilder("");  
    if (src == null || src.length <= 0) {  
        return null;  
    }  
    for (int i = 0; i < src.length; i++) {  
        int v = src[i] & 0xFF;  
        String hv = Integer.toHexString(v);  
        if (hv.length() < 2) {  
            stringBuilder.append(0);  
        }  
        stringBuilder.append(hv);  
    }  
    return stringBuilder.toString();  
}  

private static byte charToByte(char c) {  
    return (byte) "0123456789ABCDEF".indexOf(c);  
}  

 public static final InputStream byte2Input(byte[] buf) {  
        return new ByteArrayInputStream(buf);  
    }  
  
    public static final byte[] input2byte(InputStream inStream)  
            throws IOException {  
        ByteArrayOutputStream swapStream = new ByteArrayOutputStream();  
        byte[] buff = new byte[100];  
        int rc = 0;  
        while ((rc = inStream.read(buff, 0, 100)) > 0) {  
            swapStream.write(buff, 0, rc);  
        }  
        byte[] in2b = swapStream.toByteArray();  
        return in2b;  
    }  
}

------ Solution ------------------------------------- -------
then read out directly to the file , and then to stream cache memory. When used to go directly to the file stream
------ For reference only ------------------------------- --------
forehead , came up with a very simple
public class pictest
{
public pictest(){
JFrame f=new JFrame();
    Container p=f.getContentPane();
ppic pic=null;
InputStream in=null;
try{
int i=3;
String url=".................";
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection(*******);
//连接到数据库
if(!con.isClosed())
System.out.println("数据库连接成功");
String sql="select * from campusimage";
Statement st=con.createStatement();
ResultSet rs=st.executeQuery(sql);

for(int j=0;j<i;j++)
rs.next();
if(rs.next())
in=rs.getBinaryStream(1);
            //pic=new ppic(in);
new dragimage();
rs.close();
st.close();
con.close();
}catch(Exception e){e.printStackTrace();}
pic=new ppic(in);
p.setLayout(null);
p.add(pic);
f.setBounds(500,400,800,900);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

class ppic extends JPanel
{   BufferedImage bi;
ppic(InputStream in){
try{
  bi=ImageIO.read(in);
  setSize(700,600);
}catch(Exception e){e.printStackTrace();}
}
public void paint(Graphics g){
g.drawImage(bi,0,0,700,600,null);
}
}
public static void main(String[] args){
new pictest();
}

}

没有评论:

发表评论