2012-02-20 45 views
3

我寫了一個撲克模擬器/賠率計算器。在GUI上,有一些JComboBox es用戶可以從中選擇卡。Java選擇:以JAR或Base64序列存儲圖像?

現在,我對那些卡上的圖像,我也有他們在Base64格式。有三種不同的方式我嘗試顯示它們。爲了演示目的,我爲每個程序寫了一個小程序。

以下是我嘗試過的3種方法:

1)。在JAR文件存儲圖像:

非常簡單。圖像進入JAR,Java代碼從那裏讀取它們。在此之後,它創建與他們的JComboBox並將其顯示:

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JComboBox; 
import javax.swing.ImageIcon; 

public class ImagesFromJAR 
{ 
    private JFrame mainframe; 

    public ImagesFromJAR() 
    { 
     ImageIcon[] cardslist = new ImageIcon[52]; 

     for (int i = 0; i < 52; ++i) 
     { 
      cardslist[i] = new ImageIcon (getClass(). getResource ((this.getImagePath (i)))); 
     } 

     JComboBox cardsbox = new JComboBox (cardslist); 
     cardsbox.setSelectedIndex (0); 
     cardsbox.setEditable (false); 

     this.mainframe = new JFrame(); 
     this.mainframe.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE); 
     this.mainframe.setSize (150, 150); 
     this.mainframe.setLayout (null); 

     cardsbox.setBounds (20, 20, 55, 45); 
     this.mainframe.add (cardsbox); 

     this.mainframe.setVisible (true); 
    } 

    private String getImagePath (int index) 
    { 
     switch (index) 
     { 
      case 0: return "images/2c.gif"; 
      case 1: return "images/3c.gif"; 
      case 2: return "images/4c.gif"; 
      case 3: return "images/5c.gif"; 
      case 4: return "images/6c.gif"; 
      case 5: return "images/7c.gif"; 
      case 6: return "images/8c.gif"; 
      case 7: return "images/9c.gif"; 
      case 8: return "images/Tc.gif"; 
      case 9: return "images/Jc.gif"; 
      case 10: return "images/Qc.gif"; 
      case 11: return "images/Kc.gif"; 
      case 12: return "images/Ac.gif"; 
      case 13: return "images/2d.gif"; 
      case 14: return "images/3d.gif"; 
      case 15: return "images/4d.gif"; 
      ...................................... 
      default: return null; 
     } 
    } 

    public static void main (String[] args) 
    { 
     javax.swing.SwingUtilities.invokeLater (new Runnable() 
     { 
      public void run() 
      { 
       ImagesFromJAR t = new ImagesFromJAR(); 
      } 
     }); 
    } 
} 

2)。存儲Base64格式圖像在一個文本文件:

我Base64格式轉換的每個圖像,然後存儲在一個文本文件中。 Java代碼讀取該文件並通過解碼文件中的行來重新創建圖像。在此之後,創建一個JComboBox並顯示:

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JComboBox; 
import javax.swing.ImageIcon; 
import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.io.FileInputStream; 
import java.io.IOException; 

public class CodeFromFile 
{ 
    private JFrame mainframe; 

    public CodeFromFile() 
    { 
     ImageIcon[] cardslist = new ImageIcon[52]; 

     InputStreamReader in = null; 
     BufferedReader buff; 

     int index = -1; 

     try 
     { 
      in = new InputStreamReader (new FileInputStream ("card.encodings.txt")); 
      buff = new BufferedReader (in); 

      String line; 
      byte[] ba; 

      while ((line = buff.readLine()) != null) 
      { 
       if (line.length() < 10) 
       { 
        continue; 
       } 

       index++; 

       ba = Base64.decode (line); 

       cardslist[index] = new ImageIcon (ba); 
      } 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      if (in != null) 
      { 
       try 
       { 
        in.close(); 
       } 
       catch (IOException e2) {} 
      } 
     } 

     JComboBox cardsbox = new JComboBox (cardslist); 
     cardsbox.setSelectedIndex (0); 
     cardsbox.setEditable (false); 

     this.mainframe = new JFrame(); 
     this.mainframe.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE); 
     this.mainframe.setSize (150, 150); 
     this.mainframe.setLayout (null); 

     cardsbox.setBounds (20, 20, 55, 45); 
     this.mainframe.add (cardsbox); 

     this.mainframe.setVisible (true); 
    } 

    public static void main (String[] args) 
    { 
     javax.swing.SwingUtilities.invokeLater (new Runnable() 
     { 
      public void run() 
      { 
       CodeFromFile t = new CodeFromFile(); 
      } 
     }); 
    } 
} 

card.encodings.txt的內容是這樣的:

2c: 
R0lGODlhHgAmAMQAAAAAAP///+7u7t3d3czMzLu7u6qqqpmZmYiIiHd3d2ZmZlVVVURERDMzMyIiIhEREf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAeACYAAAXKIAQBZGme6CmOQeu+cAwDrGzfLonvss7/LR/u8AA0CDuh7WB6CHBKGeOEgAJ2RdPCunNQuTIFwLE4lR+H3jWWSKEMsWgr6y4p4msYvTQ93Wd5LwgnCQd9JQV4NoNjBwIMAYwNcIo8ZVVJgTIJhwuYNnIubW6UlUA8oaemqjeprDmaMQN9DEhgN5MBBA5OtzIHtgEGAJ9qpwLEvjsDAImtsTcIkMo3Ag4DmUAMztSbaajQMAmfCdig4aInDt3pfuyvQTXwMyt19ikiIQA7 
3c: 
R0lGODlhHgAmAMQAAAAAAP///+7u7t3d3czMzLu7u6qqqpmZmYiIiHd3d2ZmZlVVVURERDMzMyIiIhEREf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAeACYAAAXMIAQBZGme6CmOQeu+cAwDrGzfLonvss7/LR/u8AA0CDuh7WB6CHBKGeOEgAJ2RdPCunNQuTIFwLE4lR+H3jWWSKEMsWgr6y4p4msYvTQ93Wd5LwgnCQd9JQV4NoNjBwIMAYwNcIo8ZVVJgTIJhwuYNnIubW6UlUA8oaemqjeprDmaMowMA5k7B2kEDg22OJ+DT62xNwtbYDsDC5C9OAYkD6Wgw7JFSMKnzp9qqg/aq8gAidc3BQB3j3/jNgINJA3e26+tNfIzK3X4KSIhADs= 
4c: 
R0lGODlhHgAmALMAAAAAAP///+7u7szMzLu7u6qqqpmZmYiIiHd3d2ZmZlVVVURERDMzMyIiIhEREf///yH5BAEAAA8ALAAAAAAeACYAAATC8D1Aq734yhm6/2AIApxonh6FrqLKvp2LGg7ADKtsGpYjoDrR4nIAAlY1i8K4ahCZogSgobhUHYbWMYTIYAqhYCfprSTCWxC5MrycR+nP4YIwtCsEtGk+NQgWAXwMYHosVUU5cSIIdwqIJmIeXV6EhTAskZeWmieZnCmKJwkMmKEiBTalLAINDaSJLAkHDK9QJwWAtKonAgw/urAnCnkBwLYhBm/FtZ2mHQwZCMcoxs0w1ZDOIdhan0Al3iMbZeQZEhEAOw== 
5c: 
R0lGODlhHgAmALMAAAAAAP///+7u7szMzLu7u6qqqpmZmYiIiHd3d2ZmZlVVVURERDMzMyIiIhEREf///yH5BAEAAA8ALAAAAAAeACYAAATA8D1Aq734yhm6/2AIApxonh6FrqLKvp2LGg7ADKtsGpYjoDrR4nIAAlY1i8K4ahCZogSgobhUHYbWMYTIYAqhYCfprSTCWxC5MrycR+nP4YIwtCsEtGk+NQgWAXwMYHosVUU5cSIIdwqIJmIeXV6EhTAskZeWmieZnCmKJgwVS52hIQQWWaaGj4krAwAOCD+vKFIUDpWQpyEHQz5QL12umywMpbyaCAjCLzfOizgBjrYnbQu7yp+dJdwjG2XiGRIRADs= 

..它繼續爲每個圖像/卡。 3)。第三種方法是直接在源代碼中將圖像存儲爲Base64 String。就像這樣:

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JComboBox; 
import javax.swing.ImageIcon; 

public class CodeFromSource 
{ 
    private JFrame mainframe; 

    public CodeFromSource() 
    { 
     ImageIcon[] cardslist = new ImageIcon[52]; 

     byte[] ba; 

     for (int i = 0; i < 52; ++i) 
     { 
      ba = Base64.decode (this.getImageCode (i)); 
      cardslist[i] = new ImageIcon (ba); 
     } 

     JComboBox cardsbox = new JComboBox (cardslist); 
     cardsbox.setSelectedIndex (0); 
     cardsbox.setEditable (false); 

     this.mainframe = new JFrame(); 
     this.mainframe.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE); 
     this.mainframe.setSize (150, 150); 
     this.mainframe.setLayout (null); 

     cardsbox.setBounds (20, 20, 55, 45); 
     this.mainframe.add (cardsbox); 

     this.mainframe.setVisible (true); 
    } 

    private String getImageCode (int index) 
    { 
     switch (index) 
     { 
      case 0: return "R0lGODlhHgAmAMQAAAAAAP///+7u7t3d3czMzLu7u6qqqpmZmYiIiHd3d2ZmZlVVVURERDMzMyIiIhEREf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAeACYAAAXKIAQBZGme6CmOQeu+cAwDrGzfLonvss7/LR/u8AA0CDuh7WB6CHBKGeOEgAJ2RdPCunNQuTIFwLE4lR+H3jWWSKEMsWgr6y4p4msYvTQ93Wd5LwgnCQd9JQV4NoNjBwIMAYwNcIo8ZVVJgTIJhwuYNnIubW6UlUA8oaemqjeprDmaMQN9DEhgN5MBBA5OtzIHtgEGAJ9qpwLEvjsDAImtsTcIkMo3Ag4DmUAMztSbaajQMAmfCdig4aInDt3pfuyvQTXwMyt19ikiIQA7"; 
      case 1: return "R0lGODlhHgAmAMQAAAAAAP///+7u7t3d3czMzLu7u6qqqpmZmYiIiHd3d2ZmZlVVVURERDMzMyIiIhEREf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAeACYAAAXMIAQBZGme6CmOQeu+cAwDrGzfLonvss7/LR/u8AA0CDuh7WB6CHBKGeOEgAJ2RdPCunNQuTIFwLE4lR+H3jWWSKEMsWgr6y4p4msYvTQ93Wd5LwgnCQd9JQV4NoNjBwIMAYwNcIo8ZVVJgTIJhwuYNnIubW6UlUA8oaemqjeprDmaMowMA5k7B2kEDg22OJ+DT62xNwtbYDsDC5C9OAYkD6Wgw7JFSMKnzp9qqg/aq8gAidc3BQB3j3/jNgINJA3e26+tNfIzK3X4KSIhADs="; 
      case 2: return "R0lGODlhHgAmALMAAAAAAP///+7u7szMzLu7u6qqqpmZmYiIiHd3d2ZmZlVVVURERDMzMyIiIhEREf///yH5BAEAAA8ALAAAAAAeACYAAATC8D1Aq734yhm6/2AIApxonh6FrqLKvp2LGg7ADKtsGpYjoDrR4nIAAlY1i8K4ahCZogSgobhUHYbWMYTIYAqhYCfprSTCWxC5MrycR+nP4YIwtCsEtGk+NQgWAXwMYHosVUU5cSIIdwqIJmIeXV6EhTAskZeWmieZnCmKJwkMmKEiBTalLAINDaSJLAkHDK9QJwWAtKonAgw/urAnCnkBwLYhBm/FtZ2mHQwZCMcoxs0w1ZDOIdhan0Al3iMbZeQZEhEAOw=="; 
      case 3: return "R0lGODlhHgAmALMAAAAAAP///+7u7szMzLu7u6qqqpmZmYiIiHd3d2ZmZlVVVURERDMzMyIiIhEREf///yH5BAEAAA8ALAAAAAAeACYAAATA8D1Aq734yhm6/2AIApxonh6FrqLKvp2LGg7ADKtsGpYjoDrR4nIAAlY1i8K4ahCZogSgobhUHYbWMYTIYAqhYCfprSTCWxC5MrycR+nP4YIwtCsEtGk+NQgWAXwMYHosVUU5cSIIdwqIJmIeXV6EhTAskZeWmieZnCmKJgwVS52hIQQWWaaGj4krAwAOCD+vKFIUDpWQpyEHQz5QL12umywMpbyaCAjCLzfOizgBjrYnbQu7yp+dJdwjG2XiGRIRADs="; 
      case 4: return "R0lGODlhHgAmAMQAAAAAAP///+7u7t3d3czMzLu7u6qqqpmZmYiIiHd3d2ZmZlVVVURERDMzMyIiIhEREf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAeACYAAAXZIAQBZGme6CmOQeu+cAwDrGzfLonvss7/LR/u8AA0CDuh7WB6CHBKGeOEgAJ2RdPCunNQuTIFwLE4lR+H3jWWSKEMsWgr6y4p4msYvTQ93Wd5LwgnCQd9JQV4NoNjBwIMAYwNcIo8ZVVJgTIJhwuYNnIubW6UlUA8oaemqjeprDmaNwNiAE+gsTJMDKW3PExpqLgvAw+fmTsLD6MMtr04DwxITA1gNgQAn2KJztbYLky8gDgD3i0GANtqOw0O3w/VNgUAdwQOwNw3Bl5ox6+tNf5mrKhDMIWIEAA7"; 
      case 5: return "R0lGODlhHgAmAMQAAAAAAP///+7u7t3d3czMzLu7u6qqqpmZmYiIiHd3d2ZmZlVVVURERDMzMyIiIhEREf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAeACYAAAXGIAQBZGme6CmOQeu+cAwDrGzfLonvss7/LR/u8AA0CDuh7WB6CHBKGeOEgAJ2RdPCunNQuTIFwLE4lR+H3jWWSKEMsWgr6y4p4msYvTQ93Wd5LwgnCQd9JQV4NoNjBwIMAYwNcIo8ZVVJgTIJhwuYNnIubW6UlUA8oaemqjeprDmaMUwniaCxMIckD2A2j08tCX+2OAO/LQ61w0AFDpmnCgnOQA5IvDsGDai3YZ+t2zEPA9o/hj+uLwtp46+tNewzK3XyKSIhADs="; 
      case 6: return "R0lGODlhHgAmAMQAAAAAAP///+7u7t3d3czMzLu7u6qqqpmZmYiIiHd3d2ZmZlVVVURERDMzMyIiIhEREf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAeACYAAAXYIAQBZGme6CmOQeu+cAwDrGzfLonvss7/LR/u8AA0CDuh7WB6CHBKGeOEgAJ2RdPCunNQuTIFwLE4lR+H3jWWSKEMsWgr6y4p4msYvTQ93Wd5LwgnCQd9JQV4NoNjBwIMAYwNcIo8ZVVJgTIJhwuYNnIubW6UlUA8oaemqjeprDmaMowPn6CxMG1wBLRgNw4NLguQrbcvDE4tDAm9S0YDCMPEPIxbmTwGC161ajsGDskA24BdfwHHzDECAOUID+gxCw9wAg3l3DtiJOLjr601/TNW1BmYQkQIADs="; 
      case 7: return "R0lGODlhHgAmAMQAAAAAAP///+7u7t3d3czMzLu7u6qqqpmZmYiIiHd3d2ZmZlVVVURERDMzMyIiIhEREf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAeACYAAAXZIAQBZGme6CmOQeu+cAwDrGzfLonvss7/LR/u8AA0CDuh7WB6CHBKGeOEgAJ2RdPCunNQuTIFwLE4lR+H3jWWSKEMsWgr6y4p4msYvTQ93Wd5LwgnCQd9JQV4NoNjBwIMAYwNcIo8ZVVJgTIJhwuYNnIubW6UlUA8oaemqjeprDmaMghFk5k7CA4DAWJIrbF6aS0OkL44BQClbbqgvy4GyC6DvWrGAH+RANOrMg3QBAwPYDePJLhbxUAGD8vMQAQOn+07A23B4jICJArs969xNf5mrKhDMIWIEAA7"; 
      case 8: return "R0lGODlhHgAmAMQAAAAAAP///+7u7t3d3czMzLu7u6qqqpmZmYiIiHd3d2ZmZlVVVURERDMzMyIiIhEREf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAeACYAAAX4IAQBZGme6CmOQeu+cAwDrGzfLonvss7/LR/u8AA0CDuh7WB6CHBKGeOEgAJ2RdPCunNQuTIFwLE4lR+H3jWWSKEMsWgr6y4p4msYvTQ93Wd5LwgnCQd9JQV4NoNjBwIMAYwNcIo8ZVVJgTIJhwuYNnIubW6UlUA8oaemqjeprDmaLgIJDp8BBA1GSKsvDkWfAw9VCA8DvC8FAJ8LDS4NW4A3BMouwi7Exy7TmMlpLUyJL67bLQYApealQbHa1AHpLvDi7C3kAd0u4NE29gHWLdj2yejHzBm0eTeSAbNGzJhAGGVINKuXi8Guh6/i1Mg4Y0WdjylEhAAAOw=="; 
      case 9: return "R0lGODlhHgAmALMAAAAAAP///+7u7szMzLu7u6qqqpmZmYiIiHd3d2ZmZlVVVURERDMzMyIiIhEREf///yH5BAEAAA8ALAAAAAAeACYAAAS38D1Aq734yhm6/2AIApxonh6FrqLKvp2LGg7ADKtsGpYjoDrR4nIAAlY1i8K4ahCZogSgobhUHYbWMYTIYAqhYCfprSTCWxC5MrycR+nP4YIwtCsEtGk+NQgWAXwMYHosVUU5cSIIdwqIJmIeXV6EhTAskZeWmieZnCmKIQM9iS9deaUsczipK6uYoSKvrSizUK4ArLe1ubAvtp2xIQcOL54BVQQIb7TDFEvGwp8xJdMjG2XZGRIRADs="; 
      case 10: return "R0lGODlhHgAmAMQAAAAAAP///+7u7t3d3czMzLu7u6qqqpmZmYiIiHd3d2ZmZlVVVURERDMzMyIiIhEREf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAeACYAAAXvIAQBZGme6CmOQeu+cAwDrGzfLonvss7/LR/u8AA0CDuh7WB6CHBKGeOEgAJ2RdPCunNQuTIFwLE4lR+H3jWWSKEMsWgr6y4p4msYvTQ93Wd5LwgnCQd9JQV4NoNjBwIMAYwNcIo8ZVVJgTIJhwuYNnIubW6UlUA8oaemNgRlJAtIN6ktg38Cl7KaL0wJMGWlgDcOTjAEY6C6LQVGMl6Jq4IAWzENAMA5yZHSMtXXQdkGzDHOajdFAzADx+WLAH8uYmnsNmXTtwC9yDsHXiQN8vp4MPoUkAeBKQwAQttBIIEXbwFoZFMVZEWdiylEhAAAOw=="; 
      case 11: return "R0lGODlhHgAmAMQAAAAAAP///+7u7t3d3czMzLu7u6qqqpmZmYiIiHd3d2ZmZlVVVURERDMzMyIiIhEREf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABAALAAAAAAeACYAAAXgIAQBZGme6CmOQeu+cAwDrGzfLonvss7/LR/u8AA0CDuh7WB6CHBKGeOEgAJ2RdPCunNQuTIFwLE4lR+H3jWWSKEMsWgr6y4p4msYvTQ93Wd5LwgnCQd9JQV4NoNjBwIMAYwNcIo8ZVVJgTIJhwuYNnIubW6UlUA8oaemqjeprDmaLmUlcA0lDaCxLgMAkC4Nk626LQIAWy0IvsI3xccKCajDAc2PadHMRmRArsUMU8pgMs0BUw0DmdjHgw5IyzbjLUwA7Wo3vOBl4IA2syRwoyQe1HvVqgbBGSvqKEwhIgQAOw=="; 
      case 12: return "R0lGODlhHgAmALMAAAAAAP///+7u7szMzLu7u6qqqpmZmYiIiHd3d2ZmZlVVVURERDMzMyIiIhEREf///yH5BAEAAA8ALAAAAAAeACYAAATR8D1Aq734yhm6/2AIApxonh6FrqLKvp2LGg7ADKtsGpYjoDrR4nIAAlY1i8K4ahCZogSgobhUHYbWMYTIYAqhYCfprSTCWxC5MrycR+nP4YIwtCsEtGk+NQgWAXwMYHosVUU5cSIIdwqIJmIeXV6EhTAskZeWmieZnCmKJgMAeYkvVW9QKAIODD6mKwcIc4+QoSENA6wMsCcFgAFVOJ23H4MdBQAIqiKjFw3MIQm1XZWbIKw/HqNLticL3cYAtR+ZSQ4fZLzXnyMl7e4SZfMZEhEAOw=="; 
      case 13: return "R0lGODlhHgAmAMQAAAAAAP////8AAP8REf8iIv8zM/9ERP9VVf9mZv93d/+IiP+Zmf+qqv+7u//MzP/d3f/u7v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABEALAAAAAAeACYAAAW/YBQBZGme6CmOQeu+cAwDrGzfLonvss4HiJ9vtxAkeMMbhCAQNHZJm6EpIEBw0ZiC2gzesq8Gl7r4ApTMcfPZO9sOairBBm4t40662yZWK8w7W1wGWHs3U01WhTx3eYs8DAJejzwJV1CGP5iamnWcM5kxD4gGDps4BQwBDgQDl3o4C6YtkX+AmhACtrCaD468PwqElDtLD6c8BmzENwllSKExCbsJx8A2CWNzt9hqk22f0OFQNeMxNCIp6uskIiEAOw=="; 
      ......... 
      default: return null; 
     } 
    } 

    public static void main (String[] args) 
    { 
     javax.swing.SwingUtilities.invokeLater (new Runnable() 
     { 
      public void run() 
      { 
       CodeFromSource t = new CodeFromSource(); 
      } 
     }); 
    } 
} 

(我不得不刪除一些開關的情況下,因爲有一個30K的字符限制在計算器上)

這些方法都產生相同的結果,這是這樣的:

Result

PS:該Base64編碼類只是一些實用工具類編碼/解碼的Base64信息(你可以找到它在下面的鏈接)。

如果你想把所有的資源爲這個(圖像,源代碼等),你可以從這裏得到他們:Resources

現在我們清理,截至...我想要的是知道的這3種方法比較好。他們每個人的優點和缺點是什麼?我應該使用哪一個?爲什麼?我也在談論JAR文件損壞的可能性。

我不關心的唯一事情是性能。

回答

5
  1. 是優選的,因爲不涉及任何轉換,並且您的代碼可以從classpath中讀取它們。這使您的申請自成體系。腐敗不是問題,因爲這會導致整個應用程序無用 - 不僅僅是圖像文件將涉及轉換(啓動時間和內存)的運行時間損失,並且alsop引入了配置文件。

  2. 是爲2那樣糟糕,但也不太靈活(你可以不重新編譯改變圖像)

+0

嗯......有趣的一點。事實是,這些圖像很小(每個小於1KB),並且它們不會像'字符串'那樣佔用太多空間。我認爲我會遵循常規做法(和你的建議)並使用第一種方法。但是探索其他可能性並沒有什麼壞處。 – 2012-02-20 16:47:20

+0

問題是,你從2或3中沒有得到任何東西,但是你會受到處罰。如果zou從REST服務接收到它們,或者從某個數據庫讀取數據(因爲BLOB吸得更糟糕),那麼以base64字符串形式顯示的圖像可能是有意義的 - - 1有類路徑,二進制數據很可能已經在對齊的內存緩衝區中 - 讀取它不超過memcpy。 – 2012-02-20 18:17:44

2

把圖像中的Jar是最常見的,因此最容易讓別人一起工作或回答問題(可能會或可能不重要)。

我懷疑2或3會產生較小的末端分佈。至於腐敗的可能性。這似乎適用於Jars中的類或資源,或純文本文件。那麼問題就變成了「每個人有多可能被損壞?」我認爲答案是「字節越多,機會越大」。

相關問題