2013-07-16 42 views
2

我想在我的頁面中加載一個.swf文件,我想通過將其轉換爲Base64來提高此加載速度,而不是提供一個src。這是通過使用下面的代碼是否有可能將.swf文件轉換爲java中的base64格式

Java代碼

BufferedImage buffImg = ImageIO.read(new File(imagePath)); 
ImageIO.write(buffImg, imgExtension, bos); 
byte[] imageBytes = bos.toByteArray();     
BASE64Encoder encoder = new BASE64Encoder();  
imageString = encoder.encode(imageBytes); 

工作的偉大與圖像格式但這不工作的SWF文件。有沒有什麼可能的辦法來實現這一點。

的Html提前

<object width="10" height="10" data="data:application/x-shockwave-flash;base64, RldTCSEAAABIAZAAZAAADAEARBEIAAAAQwIAAP9AAAAA"></object> 

感謝。

+1

這只是13個字節的數據...不太可能是一個完整的SWF文件。你爲什麼在這裏使用ImageIO? ImageIO實際上處理swf文件嗎? –

+0

@ Jon Skeet - 我用它進行圖像轉換,我正在爲swf尋找類似的東西。 – Samy

+1

@JonSkeet:這是一個非常小但非常有效的SWF文件。 – duskwuff

回答

1

試圖在base64中獲取文件不會加速文件傳輸,它只是相反,因爲它會將以字節存儲的文件(base256,如果可以這樣說)轉換爲base64(64個可打印字符),因此您將要傳輸的最終數據量更多。

唯一的「勝利」是你可能能夠加載它作爲頁面的一部分,而不是瀏覽器再次調用swf文件,這在http 1.1上應該沒有問題。

除非你有其他充分的理由這樣做,否則我不會建議這種做法。

如果你的數據庫中的swf文件是blob,你可以創建一個servlet來設置正確的contenttype,並用ServletOutputStream寫入整個文件,而不用任何標籤。在你的html代碼中,你必須引用servlet而不是固定文件。

如果你仍然要將文件爲Base64轉換,你不應該使用一些圖像API,但得到的二進制文件的標準方式的文件,下面是應該做的工作樣本:

http://www.javapractices.com/topic/TopicAction.do?Id=245

你仍然可以做編碼,你做到了,一旦你有一個字節數組:

File file = new File(imagePath); 
log("File size: " + file.length()); 
byte[] result = null; 
try { 
    InputStream input = new BufferedInputStream(new FileInputStream(file)); 
    result = readAndClose(input); 
} 
catch (FileNotFoundException ex){ 
    log(ex); 
} 
BASE64Encoder encoder = new BASE64Encoder();  
imageString = encoder.encode(result); 

而且readAndClose方法:

byte[] readAndClose(InputStream aInput){ 
    byte[] bucket = new byte[32*1024]; 
    ByteArrayOutputStream result = null; 
    try { 
    try { 
     result = new ByteArrayOutputStream(bucket.length); 
     int bytesRead = 0; 
     while(bytesRead != -1){ 
     bytesRead = aInput.read(bucket); 
     if(bytesRead > 0){ 
      result.write(bucket, 0, bytesRead); 
     } 
     } 
    } 
    finally { 
     aInput.close(); 
    } 
    } 
    catch (IOException ex){ 
    log(ex); 
    } 
    return result.toByteArray(); 
} 

這應該做的伎倆,也許一些細微的調絃的代碼適應你的具體情況,對其進行優化和更好的錯誤處理...

+0

非常感謝馬丁,生病嘗試這個 – Samy

相關問題